1.首先在根目录新建test_net.py

# !/usr/bin/env python
# --------------------------------------------------------
# Tensorflow Faster R-CNN
# Licensed under The MIT License [see LICENSE for details]
# Written by Xinlei Chen, based on code from Ross Girshick
# --------------------------------------------------------
"""
Demo script showing detections in sample images.
See README.md for installation instructions before running.
"""
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
import argparse
import os
import tensorflow as tf
from lib.nets.vgg16 import vgg16
from lib.datasets.factory import get_imdb
from lib.utils.test import test_net
# NETS = {'vgg16': ('vgg16_faster_rcnn_iter_70000.ckpt',), 'res101': ('res101_faster_rcnn_iter_110000.ckpt',)}
NETS = {'vgg16': ('vgg16_faster_rcnn_iter_5000.ckpt',)}  # 训练输出模型
DATASETS = {'pascal_voc': ('voc_2007_trainval',), 'pascal_voc_0712': ('voc_2007_trainval+voc_2012_trainval',)}
def parse_args():"""Parse input arguments."""parser = argparse.ArgumentParser(description='Tensorflow Faster R-CNN test')parser.add_argument('--net', dest='demo_net', help='Network to use [vgg16 res101]',choices=NETS.keys(), default='vgg16')parser.add_argument('--dataset', dest='dataset', help='Trained dataset [pascal_voc pascal_voc_0712]',choices=DATASETS.keys(), default='pascal_voc')args = parser.parse_args()return args
if __name__ == '__main__':args = parse_args()# model pathdemonet = args.demo_netdataset = args.datasettfmodel = os.path.join('output', demonet, DATASETS[dataset][0], 'default', NETS[demonet][0])  # 模型路径# 获得模型文件名称filename = (os.path.splitext(tfmodel)[0]).split('\\')[-1]filename = 'default' + '/' + filenameimdb = get_imdb("voc_2007_test")  # 得到imdb.competition_mode('competition mode')if not os.path.isfile(tfmodel + '.meta'):print(tfmodel)raise IOError(('{:s} not found.\nDid you download the proper networks from ''our server and place them properly?').format(tfmodel + '.meta'))# set configtfconfig = tf.ConfigProto(allow_soft_placement=True)tfconfig.gpu_options.allow_growth = True# init sessionsess = tf.Session(config=tfconfig)# load networkif demonet == 'vgg16':net = vgg16(batch_size=1)# elif demonet == 'res101':# net = resnetv1(batch_size=1, num_layers=101)else:raise NotImplementedErrornet.create_architecture(sess, "TEST", 8,  # 记得修改第3个参数为:类别数量+1tag='default', anchor_scales=[8, 16, 32])saver = tf.train.Saver()saver.restore(sess, tfmodel)print('Loaded network {:s}'.format(tfmodel))print(filename)test_net(sess, net, imdb, filename, max_per_image=100)sess.close()

2.更改passcal_voc.py如下

提前在conda中按照好openpyxl包

# --------------------------------------------------------
# Fast R-CNN
# Copyright (c) 2015 Microsoft
# Licensed under The MIT License [see LICENSE for details]
# Written by Ross Girshick and Xinlei Chen
# --------------------------------------------------------
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
import pandas as pd
import matplotlib.pyplot as plt
import pylab as pl
import csv
from sklearn.metrics import precision_recall_curve
from itertools import cycle
import os
import pickle
import subprocess
import uuid
import xml.etree.ElementTree as ET
import numpy as np
import scipy.sparse
from lib.config import config2 as cfg
from lib.datasets.imdb import imdb
from lib.datasets.voc_eval import voc_eval
import openpyxl
def write_excel_xlsx(path, sheet_name,value):index = len(value)workbook = openpyxl.Workbook()sheet = workbook.activesheet.title = sheet_namefor i in range(index):#写入行,0,1,2......for j in range(len(value[i])):#写入该行的几列:第0行的1,2,3,4,5,6列然后第1行,2行等等sheet.cell(row=i + 1, column=j + 1, value=str(value[i][j]))workbook.save(path)print("xlsx格式表格写入数据成功!")
class pascal_voc(imdb):def __init__(self, image_set, year, devkit_path=None):imdb.__init__(self, 'voc_' + year + '_' + image_set)self._year = yearself._image_set = image_setself._devkit_path = self._get_default_path() if devkit_path is None \else devkit_pathself._data_path = os.path.join(self._devkit_path, 'VOC' + self._year)self._classes = ('__background__',  # always index 0'r','l','ipr','lf','c','ic','bt')#自己类别self._class_to_ind = dict(list(zip(self.classes, list(range(self.num_classes)))))self._image_ext = '.bmp'self._image_index = self._load_image_set_index()# Default to roidb handlerself._roidb_handler = self.gt_roidbself._salt = str(uuid.uuid4())self._comp_id = 'comp4'# PASCAL specific config optionsself.config = {'cleanup': True,'use_salt': True,'use_diff': False,'matlab_eval': False,'rpn_file': None}assert os.path.exists(self._devkit_path), \'VOCdevkit path does not exist: {}'.format(self._devkit_path)assert os.path.exists(self._data_path), \'Path does not exist: {}'.format(self._data_path)def image_path_at(self, i):"""Return the absolute path to image i in the image sequence."""return self.image_path_from_index(self._image_index[i])def image_path_from_index(self, index):"""Construct an image path from the image's "index" identifier."""image_path = os.path.join(self._data_path, 'JPEGImages',index + self._image_ext)assert os.path.exists(image_path), \'Path does not exist: {}'.format(image_path)return image_pathdef _load_image_set_index(self):"""Load the indexes listed in this dataset's image set file."""# Example path to image set file:# self._devkit_path + /VOCdevkit2007/VOC2007/ImageSets/Main/val.txtimage_set_file = os.path.join(self._data_path, 'ImageSets', 'Main',self._image_set + '.txt')assert os.path.exists(image_set_file), \'Path does not exist: {}'.format(image_set_file)with open(image_set_file) as f:image_index = [x.strip() for x in f.readlines()]return image_indexdef _get_default_path(self):"""Return the default path where PASCAL VOC is expected to be installed."""return os.path.join(cfg.FLAGS2["data_dir"], 'VOCdevkit' + self._year)def gt_roidb(self):"""Return the database of ground-truth regions of interest.This function loads/saves from/to a cache file to speed up future calls."""cache_file = os.path.join(self.cache_path, self.name + '_gt_roidb.pkl')if os.path.exists(cache_file):with open(cache_file, 'rb') as fid:try:roidb = pickle.load(fid)except:roidb = pickle.load(fid, encoding='bytes')print('{} gt roidb loaded from {}'.format(self.name, cache_file))return roidbgt_roidb = [self._load_pascal_annotation(index)for index in self.image_index]with open(cache_file, 'wb') as fid:pickle.dump(gt_roidb, fid, pickle.HIGHEST_PROTOCOL)print('wrote gt roidb to {}'.format(cache_file))return gt_roidbdef rpn_roidb(self):if int(self._year) == 2007 or self._image_set != 'test':gt_roidb = self.gt_roidb()rpn_roidb = self._load_rpn_roidb(gt_roidb)roidb = imdb.merge_roidbs(gt_roidb, rpn_roidb)else:roidb = self._load_rpn_roidb(None)return roidbdef _load_rpn_roidb(self, gt_roidb):filename = self.config['rpn_file']print('loading {}'.format(filename))assert os.path.exists(filename), \'rpn data not found at: {}'.format(filename)with open(filename, 'rb') as f:box_list = pickle.load(f)return self.create_roidb_from_box_list(box_list, gt_roidb)def _load_pascal_annotation(self, index):"""Load image and bounding boxes info from XML file in the PASCAL VOCformat."""filename = os.path.join(self._data_path, 'Annotations', index + '.xml')tree = ET.parse(filename)objs = tree.findall('object')if not self.config['use_diff']:# Exclude the samples labeled as difficultnon_diff_objs = [obj for obj in objs if int(obj.find('difficult').text) == 0]# if len(non_diff_objs) != len(objs):#     print 'Removed {} difficult objects'.format(#         len(objs) - len(non_diff_objs))objs = non_diff_objsnum_objs = len(objs)#图片物体数量boxes = np.zeros((num_objs, 4), dtype=np.uint16)gt_classes = np.zeros((num_objs), dtype=np.int32)#num_objs个元素的一维矩阵,代表overlaps = np.zeros((num_objs, self.num_classes), dtype=np.float32)# "Seg" area for pascal is just the box areaseg_areas = np.zeros((num_objs), dtype=np.float32)# Load object bounding boxes into a data frame.for ix, obj in enumerate(objs):bbox = obj.find('bndbox')# Make pixel indexes 0-basedx1 = float(bbox.find('xmin').text) - 1y1 = float(bbox.find('ymin').text) - 1x2 = float(bbox.find('xmax').text) - 1y2 = float(bbox.find('ymax').text) - 1cls = self._class_to_ind[obj.find('name').text.lower().strip()]boxes[ix, :] = [x1, y1, x2, y2]gt_classes[ix] = clsoverlaps[ix, cls] = 1.0seg_areas[ix] = (x2 - x1 + 1) * (y2 - y1 + 1)overlaps = scipy.sparse.csr_matrix(overlaps)return {'boxes': boxes,#'gt_classes': gt_classes,'gt_overlaps': overlaps,#'flipped': False,'seg_areas': seg_areas}def _get_comp_id(self):comp_id = (self._comp_id + '_' + self._salt if self.config['use_salt']else self._comp_id)return comp_id'''def _get_voc_results_file_template(self):##生成txt文本路路径# VOCdevkit/results/VOC2007/Main/<comp_id>_det_test_aeroplane.txtfilename = self._get_comp_id() + '_det_' + self._image_set + '_{:s}.txt'#待检测图片文件名path = os.path.join(self._devkit_path,'results','VOC' + self._year,'Main',filename)return pathdef _write_voc_results_file(self, all_boxes):###写入文本文件for cls_ind, cls in enumerate(self.classes):if cls == '__background__':continue#继续循环print('Writing {} VOC results file'.format(cls))#cls为类别filename = self._get_voc_results_file_template().format(cls)with open(filename, 'w') as f:for im_ind, index in enumerate(self.image_index):dets = all_boxes[cls_ind][im_ind]if dets == []:continue# the VOCdevkit expects 1-based indicesfor k in range(dets.shape[0]):f.write('{:s} {:.3f} {:.1f} {:.1f} {:.1f} {:.1f}\n'.format(index, dets[k, -1],dets[k, 0] + 1, dets[k, 1] + 1,dets[k, 2] + 1, dets[k, 3] + 1))'''#改为生成表格文档def _get_voc_results_file_template(self):  ##生成txt文本路路径# VOCdevkit/results/VOC2007/Main/<comp_id>_det_test_aeroplane.txtfilename = self._get_comp_id() + '_det_' + self._image_set + '_{:s}.xlsx'  # 待检测图片文件名path = os.path.join(self._devkit_path,'results','VOC' + self._year,'Main',filename)return pathdef _write_voc_results_file(self, all_boxes):  ###写入文本文件for cls_ind, cls in enumerate(self.classes):predict=[]if cls == '__background__':continue  # 继续循环print('Writing {} VOC results file'.format(cls))  # cls为类别filename = self._get_voc_results_file_template().format(cls)for im_ind, index in enumerate(self.image_index):dets = all_boxes[cls_ind][im_ind]if dets == []:continue# the VOCdevkit expects 1-based indices###############for k in range(dets.shape[0]):pred=[]pred.append(index)pred.append(str(round(dets[k, -1], 3)))pred.append(str(round(dets[k, 0] + 1, 1)))pred.append(str(round(dets[k, 1] + 1, 1)))pred.append(str(round(dets[k, 2] + 1, 1)))pred.append(str(round(dets[k, 3] + 1, 1)))predict.append(pred)print(predict)if os.path.exists(filename):#判断是否存在该文件存在则删除os.remove(filename)write_excel_xlsx(filename, 'name',predict)def _do_python_eval(self, output_dir='output'):annopath = self._devkit_path + '\\VOC' + self._year + '\\Annotations\\' + '{:s}.xml'imagesetfile = os.path.join(self._devkit_path,'VOC' + self._year,'ImageSets','Main',self._image_set + '.txt')cachedir = os.path.join(self._devkit_path, 'annotations_cache')aps = []#加recs=[]precs=[]#结束# The PASCAL VOC metric changed in 2010use_07_metric = True if int(self._year) < 2010 else Falseprint('VOC07 metric? ' + ('Yes' if use_07_metric else 'No'))if not os.path.isdir(output_dir):os.mkdir(output_dir)##加#######for i, cls in enumerate(self._classes):if cls == '__background__':continuefilename = self._get_voc_results_file_template().format(cls)rec, prec, ap = voc_eval(filename, annopath, imagesetfile, cls, cachedir, ovthresh=0.5,use_07_metric=use_07_metric)aps += [ap]#加'''recs += [rec[-1]]precs += [prec[-1]]print('AP for {} = {:.4f}'.format(cls, ap))print('recall for {} = {:.4f}'.format(cls, rec[-1]))print('precision for {} = {:.4f}'.format(cls, prec[-1]))with open(os.path.join(output_dir, cls + '_pr.pkl'), 'w') as f:pickle.dump({'rec': rec, 'prec': prec, 'ap': ap}, f)print('Mean AP = {:.4f}'.format(np.mean(aps)))print('~~~~~~~~')print('Results:')'''pl.plot(rec, prec, lw=2,label='Precision-recall curve of class {} (area = {:.4f})'''.format(cls, ap))#cls代表类别,ap面积print(('AP for {} = {:.4f}'.format(cls, ap)))#加#file.writelines('AP for {} = {:.4f}'.format(cls, ap))#file.write('\n')#file.close()with open(os.path.join(output_dir, cls + '_pr.pkl'), 'wb') as f:pickle.dump({'rec': rec, 'prec': prec, 'ap': ap}, f)#加pkl中存储的是每个类的rec,prec从小到大的值以及ap的值##加#with open(os.path.join(output_dir,cls+'.txt'),'w') as f:#f.writelines(ap)####结束pl.xlabel('Recall')pl.ylabel('Precision')plt.grid(True)pl.ylim([0.0, 1.2])pl.xlim([0.0, 1.0])pl.title('Precision-Recall')pl.legend(loc="upper right")plt.show()print(('Mean AP = {:.4f}'.format(np.mean(aps))))print('~~~~~~~~')print('Results:')for ap in aps:print(('{:.3f}'.format(ap)))print(('{:.3f}'.format(np.mean(aps))))print('~~~~~~~~')print('')print('--------------------------------------------------------------')print('Results computed with the **unofficial** Python eval code.')print('Results should be very close to the official MATLAB eval code.')print('Recompute with `./tools/reval.py --matlab ...` for your paper.')print('-- Thanks, The Management')print('--------------------------------------------------------------')def _do_matlab_eval(self, output_dir='output'):print('-----------------------------------------------------')print('Computing results with the official MATLAB eval code.')print('-----------------------------------------------------')path = os.path.join(cfg.FLAGS2["root_dir"], 'lib', 'datasets','VOCdevkit-matlab-wrapper')cmd = 'cd {} && '.format(path)cmd += '{:s} -nodisplay -nodesktop '.format('matlab')cmd += '-r "dbstop if error; 'cmd += 'voc_eval(\'{:s}\',\'{:s}\',\'{:s}\',\'{:s}\'); quit;"' \.format(self._devkit_path, self._get_comp_id(),self._image_set, output_dir)print(('Running:\n{}'.format(cmd)))status = subprocess.call(cmd, shell=True)def evaluate_detections(self, all_boxes, output_dir):self._write_voc_results_file(all_boxes)self._do_python_eval(output_dir)if self.config['matlab_eval']:self._do_matlab_eval(output_dir)#if self.config['cleanup']:#    for cls in self._classes:#        if cls == '__background__':#            continue#        filename = self._get_voc_results_file_template().format(cls)#       os.remove(filename)def competition_mode(self, on):if on:self.config['use_salt'] = Falseself.config['cleanup'] = Falseelse:self.config['use_salt'] = Trueself.config['cleanup'] = True
if __name__ == '__main__':from lib.datasets.pascal_voc import pascal_vocd = pascal_voc('trainval', '2007')res = d.roidbfrom IPython import embed;embed()

3.更改voc_eval.py如下

# --------------------------------------------------------
# Fast/er R-CNN
# Licensed under The MIT License [see LICENSE for details]
# Written by Bharath Hariharan
# --------------------------------------------------------
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
import os
import pickle
import xml.etree.ElementTree as ET
import numpy as np
import openpyxl
def read_excel_xlsx(path, sheet_name):workbook = openpyxl.load_workbook(path)sheet = workbook[sheet_name]print(sheet,sheet_name)spitlines=[]for row in sheet.rows:T=[]for cell in row:T.append(str(cell.value))spitlines.append(T)return spitlines
def parse_rec(filename):#读取标注xml文件""" Parse a PASCAL VOC xml file """tree = ET.parse(filename)objects = []#./data/VOCdevkit2007/VOC2007/Annotations/for obj in tree.findall('object'):obj_struct = {}obj_struct['name'] = obj.find('name').textobj_struct['pose'] = obj.find('pose').textobj_struct['truncated'] = int(obj.find('truncated').text)obj_struct['difficult'] = int(obj.find('difficult').text)bbox = obj.find('bndbox')obj_struct['bbox'] = [int(bbox.find('xmin').text),int(bbox.find('ymin').text),int(bbox.find('xmax').text),int(bbox.find('ymax').text)]objects.append(obj_struct)return objects
def voc_ap(rec, prec, use_07_metric=False):#rec=召回率,prec=精确度""" ap = voc_ap(rec, prec, [use_07_metric])Compute VOC AP given precision and recall.If use_07_metric is true, uses theVOC 07 11 point method (default:False).计算AP值,若use_07_metric=true,则用11个点采样的方法,将rec从0-1分成11个点,这些点prec值求平均近似表示AP若use_07_metric=false,则采用更为精确的逐点积分方法"""if use_07_metric:# 11 point metricap = 0.for t in np.arange(0., 1.1, 0.1):if np.sum(rec >= t) == 0:p = 0else:p = np.max(prec[rec >= t])ap = ap + p / 11.else:# correct AP calculation# first append sentinel values at the endmrec = np.concatenate(([0.], rec, [1.]))mpre = np.concatenate(([0.], prec, [0.]))# compute the precision envelopefor i in range(mpre.size - 1, 0, -1):mpre[i - 1] = np.maximum(mpre[i - 1], mpre[i])# to calculate area under PR curve, look for points# where X axis (recall) changes valuei = np.where(mrec[1:] != mrec[:-1])[0]# and sum (\Delta recall) * precap = np.sum((mrec[i + 1] - mrec[i]) * mpre[i + 1])return ap
def voc_eval(detpath,#主函数,计算当前类别的recall和precisionannopath,#标注路径imagesetfile,#图片路径classname,#类别名称cachedir,ovthresh=0.5,use_07_metric=False):"""rec, prec, ap = voc_eval(detpath,annopath,imagesetfile,classname,[ovthresh],[use_07_metric])
该文件格式:imagename1 confidence xmin ymin xmax ymax  (图像1的第一个结果)imagename1 confidence xmin ymin xmax ymax  (图像1的第二个结果)imagename1 confidence xmin ymin xmax ymax  (图像2的第一个结果)每个结果占一行,检测到多少个BBox就有多少行,这里假设有20000个检测结果Top level function that does the PASCAL VOC evaluation.detpath: Path to detectionsdetpath.format(classname) should produce the detection results file.annopath: Path to annotationsannopath.format(imagename) should be the xml annotations file.imagesetfile: Text file containing the list of images, one image per line.classname: Category name (duh)cachedir: Directory for caching the annotations[ovthresh]: Overlap threshold (default = 0.5)[use_07_metric]: Whether to use VOC07's 11 point AP computation(default False)"""# assumes detections are in detpath.format(classname)# assumes annotations are in annopath.format(imagename)# assumes imagesetfile is a text file with each line an image name# cachedir caches the annotations in a pickle file# first load gtif not os.path.isdir(cachedir):os.mkdir(cachedir)cachefile = os.path.join(cachedir, 'annots.pkl')#cachdir=data/vocdevkit2007# read list of imageswith open(imagesetfile, 'r') as f:lines = f.readlines()#读取所有待检测图像名字imagenames = [x.strip() for x in lines]#待检测图像文件名字存在于数组imagenames长度1000if not os.path.isfile(cachefile):#如果只读文件不存在,则只好从原始数据集中重新加载数据# load annotsrecs = {}for i, imagename in enumerate(imagenames):recs[imagename] = parse_rec(annopath.format(imagename))if i % 100 == 0:#parse_rec函数读取当前图像标注文件,返回当前图像标注,存于recs字典(key是图像名字,values是gt)print('Reading annotation for {:d}/{:d}'.format(i + 1, len(imagenames)))# saveprint('Saving cached annotations to {:s}'.format(cachefile))with open(cachefile, 'wb') as f:pickle.dump(recs, f)else:# loadwith open(cachefile, 'rb') as f:try:recs = pickle.load(f)except:recs = pickle.load(f, encoding='bytes')# extract gt objects for this classclass_recs = {}npos = 0for imagename in imagenames:R = [obj for obj in recs[imagename] if obj['name'] == classname]bbox = np.array([x['bbox'] for x in R])#抽取bboxdifficult = np.array([x['difficult'] for x in R]).astype(np.bool)det = [False] * len(R)npos = npos + sum(~difficult)class_recs[imagename] = {'bbox': bbox,'difficult': difficult,'det': det}# read dets读取检测结果detfile = detpath.format(classname)#detfilew为预测的文本文件位置,每一类的都有#with open(detfile, 'r') as f:#lines = f.readlines()#splitlines = [x.strip().split(' ') for x in lines]splitlines=read_excel_xlsx(detfile,'name')image_ids = [x[0] for x in splitlines]confidence = np.array([float(x[1]) for x in splitlines])BB = np.array([[float(z) for z in x[2:]] for x in splitlines])nd = len(image_ids)tp = np.zeros(nd)fp = np.zeros(nd)if BB.shape[0] > 0:# sort by confidencesorted_ind = np.argsort(-confidence)sorted_scores = np.sort(-confidence)BB = BB[sorted_ind, :]image_ids = [image_ids[x] for x in sorted_ind]# go down dets and mark TPs and FPsfor d in range(nd):R = class_recs[image_ids[d]]bb = BB[d, :].astype(float)ovmax = -np.infBBGT = R['bbox'].astype(float)if BBGT.size > 0:# compute overlaps# intersectionixmin = np.maximum(BBGT[:, 0], bb[0])iymin = np.maximum(BBGT[:, 1], bb[1])ixmax = np.minimum(BBGT[:, 2], bb[2])iymax = np.minimum(BBGT[:, 3], bb[3])iw = np.maximum(ixmax - ixmin + 1., 0.)ih = np.maximum(iymax - iymin + 1., 0.)inters = iw * ih# unionuni = ((bb[2] - bb[0] + 1.) * (bb[3] - bb[1] + 1.) +(BBGT[:, 2] - BBGT[:, 0] + 1.) *(BBGT[:, 3] - BBGT[:, 1] + 1.) - inters)overlaps = inters / uniovmax = np.max(overlaps)#最大重合率jmax = np.argmax(overlaps)if ovmax > ovthresh:#如果当前检测结果与真实标注最大重合率满足阈值if not R['difficult'][jmax]:if not R['det'][jmax]:tp[d] = 1.#正检数目+1R['det'][jmax] = 1else:#相反,认为检测到一个虚警fp[d] = 1.else:fp[d] = 1.# compute precision recallfp = np.cumsum(fp)#积分图,在当前节点前的虚警数量,fp长度tp = np.cumsum(tp)#积分图,在当前节点前的正检数量rec = tp / float(npos) #召回率,长度20000,从0到1# avoid divide by zero in case the first detection matches a difficult# ground truthprec = tp / np.maximum(tp + fp, np.finfo(np.float64).eps)ap = voc_ap(rec, prec, use_07_metric)##tpr=recreturn rec, prec, ap

效果:

Frasterrcnn-tensorflow-python3.5-master生成预测坐标位置并存储到xlsl表格中,并生成pr曲线相关推荐

  1. 在word表格中一键生成序号,如何操作?

    在word表格中一键生成序号,如何操作? 目录 在word表格中一键生成序号,如何操作? 1.首先选中需要填序号的这一列​ 2.在[开始]菜单中找到[多级列表]点击,再点击[定义新的多级列表]​ 3. ...

  2. 利用Excel表格中数据生成地图类型可视化图形案例

    利用Excel表格中数据生成地图类型可视化图形案例 一.准备工作 二.读取excel数据 三.创建地图并进行设置 创建地图 设置地图相关参数 四.渲染保存为网页文件 写在最后 某人工作不设限,创新不断 ...

  3. 计算机中表格怎么用英语说,电脑excel表格如何在表格中随机生成一个大写英文字母...

    电脑excel表格如何在表格中随机生成一个大写英文字母 我们可以利用一个函数(在表格中随机生成大写字母)来帮助我们制作英文练习本,今天小编就告诉大家电脑excel表格如何在表格中随机生成一个大写英文字 ...

  4. excel数据生成条码或者二维码并放在表格中(VBA)

    最近做的项目要将一列数据生成条码和二维码,并打印 这是一个简单的表格操作嵌入式脚本目的是生成二维码或条码 直接上代码 Sub 批量生成二维码()Dim k As Long, i As Long, j ...

  5. 随机数公式生成一个负数和正数之间的数_Excel中如何生成12个[-1,1]的随机数,要求连续正数与负数不能超过2个。...

    展开全部 公式也是可以的,但要做特殊的处理: 1.  先在文件选项卡的选项的公式选项卡中32313133353236313431303231363533e59b9ee7ad94313333656634 ...

  6. np.meshgrid()函数 以及 三维空间中的坐标位置生成 以及 numpy.repeat()函数介绍

    一.np.meshgrid()函数 1.np.meshgrid()介绍 X, Y = np.meshgrid(x, y) 代表的是将x中每一个数据和y中每一个数据组合生成很多点,然后将这些点的x坐标放 ...

  7. doc自动生成html,java web应用中自动生成文章html页面的实现.doc

    java web应用中自动生成文章html页面的实现 java web应用中自动生成文章html页面的实现 2009-11-09 00:24:15 标签:web开发,页面转换 [推送到技术圈] 版权声 ...

  8. 分分钟教会你如何在表格中生成条形码

    昨天我们说了如何在表格中制作二维码,那么现在来说一下条形码怎样生成吧! 条形码想必大家也都不陌生,生活中随处可见条形码,超市中各类商品.服装标签.会员卡.快递单等好多地方都会用到条形码. 因为条形码可 ...

  9. WPS表格怎么自动生成1234序号并自动排列

    如需了解更多办公应用的相关教程,可进入到赛效官方网站查看应用软件栏目查看更多教程的操作方法. 在日常办公中,我们经常会用到给WPS表格排列序号的问题,通常序号会按照1234.....的格式进行排列,想 ...

  10. Python TensorFlow循环神经网络RNN-LSTM神经网络预测股票市场价格时间序列和MSE评估准确性...

    全文链接:http://tecdat.cn/?p=26562 该项目包括: 自 2000 年 1 月以来的股票价格数据.我们使用的是 Microsoft 股票. 将时间序列数据转换为分类问题. 使用 ...

最新文章

  1. 创业者具备的五大技能_一个优秀创业者必备的基本素质和技能
  2. php管理员登录文件,快速的事情,只有管理员,PHP才能访问文件
  3. 团购、定时抢购倒计时js版
  4. python输入两个正整数m和n用for循环求其最大公约数_输入两个正整数,m和n,求其最大公约数和最小公倍数。...
  5. LaTeX对公式字体加粗
  6. linux将日期和日历信息追加到文件中_Linux常用指令
  7. 银行业务队列简单模拟(队列queue)
  8. Intel® Nehalem/Westmere架构/微架构/流水线 (6) - 读写操作Load/Store增强
  9. 2021了,你还不能玩转js正则表达式?
  10. python之pyc
  11. activiti Stream之list转map及问题解决
  12. Spring Framework 官方文档学习(二)之IoC容器与bean lifecycle
  13. linux系统安装红蜘蛛,在linux Deepin深度系统安装多媒体电子教室Veyon
  14. Android手机端脚本录制
  15. 【微信小程序】数据绑定
  16. 解决python 服务端口探测探活
  17. 怎么选聚氨酯减震弹簧万向轮
  18. ios上查看html源码,如何在ios手机端的Safari浏览器中“查看网页源代码”
  19. 定位python内存泄漏问题
  20. stm32L0系统----开发环境搭建

热门文章

  1. 如何通过球面投影(Spherical Projection)将点云转换为距离图像(Range Images)
  2. 200行Python代码实现B站UP主小助手(显示视频播放数、粉丝数等)
  3. 什么是决策!决策的定义!决策的本质!大数据决策定义!
  4. 水晶报表for java_水晶报表(学习笔记)
  5. 离散傅里叶变换到Z变换及收敛域分析-DTFT到ZT
  6. 无法定位序数XX于动态链接库XX.dll的解决的方法
  7. iphone个系列尺寸_iphone12哪个尺寸好 iphone12系列尺寸参数对比
  8. flash动画入门篇
  9. Java关于中查询数据时,报错java.lang.IllegalArgumentException: HOUR_OF_DAY: 0 -> 1的问题
  10. 关于 Linux 中 signal 函数信号处理的讨论