环境 :win10 + tensorflow
前期准备:完成object detection api 的配置 环境配置
(一)图片准备
下载labelimg 有很多种方法这里 列出几种
1.去github 上下载附上链接 https://github.com/tzutalin/labelImg/releases
labelimg下载
下载后直接解压运行labelimg.exe
2.有pycharm 的同学直接“File”-“setting”-“project interpreter”-点击“+”号
输入框中输入 “labelimg”中的labelimg.py 运行 后 可看到
点击“open”打开要使用的图片的路径-点击
一直到自己的图片打完为止
找到自己打完标签后的xml文件路径
(二)xml 转换csv
# -*- coding: utf-8 -*-
import os
import glob
import pandas as pd
import xml.etree.ElementTree as ET
# 用于改变当前工作目录到指定的路径。
os.chdir(r'C:\Users\Administrator\Desktop\实验手册\soursexml')
# 图片路径
path = r'C:\Users\Administrator\Desktop\实验手册\soursexml'
def xml_to_csv(path):
counter = 0;
xml_list = []
for xml_file in glob.glob(path + '/*.xml'):
counter = counter + 1;
tree = ET.parse(xml_file)
root = tree.getroot()
for member in root.findall('object'):
value = (root.find('filename').text,
int(root.find('size')[0].text),
int(root.find('size')[1].text),
member[0].text,
int(member[4][0].text),
int(member[4][1].text),
int(member[4][2].text),
int(member[4][3].text)
)
xml_list.append(value)
print(xml_list)
column_name = ['filename', 'width', 'height', 'class', 'xmin', 'ymin', 'xmax', 'ymax']
xml_df = pd.DataFrame(xml_list, columns=column_name)
print(xml_df)
print('执行', counter, '次!')
return xml_df
def main():
image_path = path
xml_df = xml_to_csv(image_path)
# xml_df.to_csv('arthritis_test.csv', index=None)
xml_df.to_csv('arthritis_test.csv', index=None)
print('Successfully converted xml to csv.')
main()
改变path 和os.chdir 到自己的使用 labelimg 生成的xml文件目录
运行程序后会得到一个csv文件
()
(三)生成tfrecord文件
"""
Usage:
# From tensorflow/models/
# Create train data:
python generate_tfrecord.py --csv_input=data/tv_vehicle_labels.csv --output_path=train.record
# Create test data:
python generate_tfrecord.py --csv_input=data/test_labels.csv --output_path=test.record
"""
import os
import io
import pandas as pd
import tensorflow as tf
from PIL import Image
from object_detection.utils import dataset_util
from collections import namedtuple, OrderedDict
os.chdir(r'D:\anaconda\envs\tensorflow\download\models-master\research\object_detection')
# 这里改自己的object_detection的路径下
flags = tf.app.flags
flags.DEFINE_string('csv_input', '', 'Path to the CSV input')
flags.DEFINE_string('output_path', '', 'Path to output TFRecord')
FLAGS = flags.FLAGS
# TO-DO replace this with label map
# 注意将对应的label改成自己的类别!!!!!!!!!!
def class_text_to_int(row_label):
if row_label == 'daisy':
return 1
# elif row_label == 'vehicle':
#
# return 2
else:
None
def split(df, group):
data = namedtuple('data', ['filename', 'object'])
gb = df.groupby(group)
return [data(filename, gb.get_group(x)) for filename, x in zip(gb.groups.keys(), gb.groups)]
def create_tf_example(group, path):
with tf.gfile.GFile(os.path.join(path, '{}'.format(group.filename)), 'rb') as fid:
encoded_jpg = fid.read()
encoded_jpg_io = io.BytesIO(encoded_jpg)
image = Image.open(encoded_jpg_io)
width, height = image.size
filename = group.filename.encode('utf8')
image_format = b'jpg'
xmins = []
xmaxs = []
ymins = []
ymaxs = []
classes_text = []
classes = []
for index, row in group.object.iterrows():
xmins.append(row['xmin'] / width)
xmaxs.append(row['xmax'] / width)
ymins.append(row['ymin'] / height)
ymaxs.append(row['ymax'] / height)
classes_text.append(row['class'].encode('utf8'))
classes.append(class_text_to_int(row['class']))
tf_example = tf.train.Example(features=tf.train.Features(feature={
'image/height': dataset_util.int64_feature(height),
'image/width': dataset_util.int64_feature(width),
'image/filename': dataset_util.bytes_feature(filename),
'image/source_id': dataset_util.bytes_feature(filename),
'image/encoded': dataset_util.bytes_feature(encoded_jpg),
'image/format': dataset_util.bytes_feature(image_format),
'image/object/bbox/xmin': dataset_util.float_list_feature(xmins),
'image/object/bbox/xmax': dataset_util.float_list_feature(xmaxs),
'image/object/bbox/ymin': dataset_util.float_list_feature(ymins),
'image/object/bbox/ymax': dataset_util.float_list_feature(ymaxs),
'image/object/class/text': dataset_util.bytes_list_feature(classes_text),
'image/object/class/label': dataset_util.int64_list_feature(classes),
}))
return tf_example
def main(_):
writer = tf.python_io.TFRecordWriter(FLAGS.output_path)
path = os.path.join(os.getcwd(), 'images')
examples = pd.read_csv(FLAGS.csv_input)
grouped = split(examples, 'filename')
for group in grouped:
tf_example = create_tf_example(group, path)
writer.write(tf_example.SerializeToString())
writer.close()
output_path = os.path.join(os.getcwd(), FLAGS.output_path)
print('Successfully created the TFRecords: {}'.format(output_path))
if __name__ == '__main__':
tf.app.run()
运行
论文题啦。。。。与poj3281一摸一样....每个人有自己喜欢的食物和饮料,算作一个从源到汇的流。关键地方是将人拆成两个点,分别连源和汇,这样就是多源多汇的最大流了。为什么要拆点呢,因为每个人只能算一种食物一种饮料,不然就有不同的食物流到不同的饮料了。。。#include#include#include#define NODE_SIZE 10010#define EDG
CALayer属于Core Animation部分的内容,比较重要而不太好理解。以下是园子中看到的一篇文章的摘录:1. UIView是iOS系统中界面元素的基础,所有的界面元素都是继承自它。它本身完全是由CoreAnimation来实现的。它真正的绘图部分,是由一个CALayer类来管理。UIView本身更像是一个CALayer的管理器,访问它的跟绘图和跟坐标有关的属性,例如frame,b
作业2问题描述问题分析:insideTriangle(int x, int y, const Vector3f _v)*测试点是否在三角形内,(x,y)代表P点,_v[0]代表三角形A点位置,_v[1]代表三角形A点位置,_v[2]代表三角形A点位置。根据右手定则,ABxAP 四指由AB边向AP方向握,伸出大拇指指向方向,依次做BC边,AC边,当三次大拇指指向是同一方向(指向屏幕外,指向屏幕内),则证明P点在三角形内。要进行光栅化首先得知道了哪些点在三角形内,才能进一步进行处理。更改P
我们像git项目中添加一个新的文件时候,idea会弹出一个对话框是否添加文件到git项目中,选择yes就可以,这时看1这个txt文件的图标变为绿色了,说明在git项目的内存中了,如下图像2这种文件夹,还需要点击2这个文件,操作一下上图的步骤,还可以在setting里设置成自动提交...
最近一直忙于项目的事情,很长一段时间没有博了,最近在部署ESXI的时候发现了一些问题,今天晚上回来的早,将其发出现,希望能够有需要的朋友。自动从上ESXI5.5以后,多少存在一些问题,如SSO问题、Windows Server 2008蓝屏问题,这次将服务器升级了一下,正好解决了这些问题,这里写一下升级过程。 从ESXi 5.5升级到ESXi 5.5 U1 使用esxc...
2021 年 12 月 30 日,融云主办的业内首个程序员综艺“猿桌派”第二期开播。节目聚焦经久不衰的技术选型问题,是跨端还是原生?是 Flutter 还是 React Native?以下为精彩回顾:从成本和市场覆盖的角度来看,跨端方案的优势是巨大的,写一次即可全平台运行。那么,跨端方案如何选?Flutter 还是 React Native?Flutter VS React Native:生态对比通过 Flutter 和 React Native 在 GitHub 上的基础数据对比双方生态。Fl
1 MCollective介绍MCollective 是一个构建服务器编排(ServerOrchestration)和并行工作执行系统的框架。首先,MCollective是一种针对服务器集群进行可编程控制的系统管理解决方案。在这一点上,它的功能类似:Func,Fabric和Capistrano。其次,MCollective的设计打破基于中心存储式系统和像SSH 这样的工具,不...
01T-SQL案例整理已知有一个表:该表的字段有:id,name,date,gradeid,email,表名为table_name,按要求实现下面内容。1.插入一条记录:inserti...
1. 从可以快速阅读的书开始哪些是可以快速阅读的书?贯穿全书的线索很少,相对独立的章节较多,无论从哪里开始阅读都可以有所收获。和不能快速阅读的书搭配阅读可以快速阅读的书和不能快速阅读的书,比例应该是9:1,每天的阅读时间比例是1:1阅读一本书的时间不能过长阅读一本书的时间不应该超过10天,最好是每天阅读的书都不同。创造一种接连不断阅读各类书籍的氛围,让自己感受到切...
21世纪是信息化时代,在这个特殊的时代,我们的生活中电子设备越来越多,比如,笔记本电脑, ATM取款机,考勤系统,门禁系统和各种智能卡,网络中的网上银行,人人网账号等,都需要验证身份。对个人身份识别技术的要求不断提高,如果没有安全可靠和快捷的身份识别技术,电子商务、网上购物等就存在重大隐患。目前许多身份验证系统都采用“用户名+密码”的方式来进行用户访问控制,但此方法存在诸多隐患,比如密码被窃取、破解或遗忘。因此我们在与机器交互时急需一种准确、安全快捷的识别技术来取代现有的身份验证。
# Filename: /etc/zsh/zshrc# Purpose: config file for zsh (z shell)# Authors: grml-team (grml.org), (c) Michael Prokop <[email protected]># Bug-Reports: see http://grml.org/bugs...
教程中的笔记,整理放到博客上。