Tensorflow 学习之Google Object Detection api 的学习(二)检测自己的图片_qq_15205173的博客-程序员秘密

环境 :win10 + tensorflow
前期准备:完成object detection api 的配置 环境配置
(一)图片准备
下载labelimg 有很多种方法这里 列出几种
1.去github 上下载附上链接 https://github.com/tzutalin/labelImg/releases
labelimg下载
下载后直接解压运行labelimg.exe
2.有pycharm 的同学直接“File”-“setting”-“project interpreter”-点击“+”号在这里插入图片描述
输入框中输入 “labelimg”![在这里插入图片描述](https://img-blog.csdnimg.cn/20190812133923856.PNG在这里插入图片描述
点击“install package”在这里插入图片描述
安装成功后打开D:\anaconda\envs\tensorflow\Lib\site-packages\labelImg(找到你使用相对应环境中的site-packages文件夹 因为我用了多个环境这里用的是tensorflow )中的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()

运行

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_15205173/article/details/99297197

智能推荐

2012成都赛区网络赛 hdu4292_MichaleLeo的博客-程序员秘密

论文题啦。。。。与poj3281一摸一样....每个人有自己喜欢的食物和饮料,算作一个从源到汇的流。关键地方是将人拆成两个点,分别连源和汇,这样就是多源多汇的最大流了。为什么要拆点呢,因为每个人只能算一种食物一种饮料,不然就有不同的食物流到不同的饮料了。。。#include#include#include#define NODE_SIZE 10010#define EDG

CALayer与UIView的关系_calayer和uiview_u011140147的博客-程序员秘密

CALayer属于Core Animation部分的内容,比较重要而不太好理解。以下是园子中看到的一篇文章的摘录:1. UIView是iOS系统中界面元素的基础,所有的界面元素都是继承自它。它本身完全是由CoreAnimation来实现的。它真正的绘图部分,是由一个CALayer类来管理。UIView本身更像是一个CALayer的管理器,访问它的跟绘图和跟坐标有关的属性,例如frame,b

GAMES101 闫令琪图形学 作业2_再学一个我就睡的博客-程序员秘密

作业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

Intellij Idea新建文件时自动add进版本控制SVN 或 GIT_yyf960126的博客-程序员秘密

我们像git项目中添加一个新的文件时候,idea会弹出一个对话框是否添加文件到git项目中,选择yes就可以,这时看1这个txt文件的图标变为绿色了,说明在git项目的内存中了,如下图像2这种文件夹,还需要点击2这个文件,操作一下上图的步骤,还可以在setting里设置成自动提交...

ESXI5.5 升级至 ESXI5.5 Update 1解决SSO与Win2008蓝屏问题_weixin_33939380的博客-程序员秘密

        最近一直忙于项目的事情,很长一段时间没有博了,最近在部署ESXI的时候发现了一些问题,今天晚上回来的早,将其发出现,希望能够有需要的朋友。自动从上ESXI5.5以后,多少存在一些问题,如SSO问题、Windows Server 2008蓝屏问题,这次将服务器升级了一下,正好解决了这些问题,这里写一下升级过程。       从ESXi 5.5升级到ESXi 5.5 U1 使用esxc...

Flutter VS React Native,跨端方案大 PK_跨端方案对比_融云的博客-程序员秘密

2021 年 12 月 30 日,融云主办的业内首个程序员综艺“猿桌派”第二期开播。节目聚焦经久不衰的技术选型问题,是跨端还是原生?是 Flutter 还是 React Native?以下为精彩回顾:从成本和市场覆盖的角度来看,跨端方案的优势是巨大的,写一次即可全平台运行。那么,跨端方案如何选?Flutter 还是 React Native?Flutter VS React Native:生态对比通过 Flutter 和 React Native 在 GitHub 上的基础数据对比双方生态。Fl

随便推点

Puppet系列之六:如何更加安全高效地实现Puppet的推送更新功能_weixin_33994429的博客-程序员秘密

1 MCollective介绍MCollective 是一个构建服务器编排(ServerOrchestration)和并行工作执行系统的框架。首先,MCollective是一种针对服务器集群进行可编程控制的系统管理解决方案。在这一点上,它的功能类似:Func,Fabric和Capistrano。其次,MCollective的设计打破基于中心存储式系统和像SSH 这样的工具,不...

干货!sqlserver数据库所有知识点总结整理,含代码(挺全的)_穆雄雄的博客-程序员秘密

01T-SQL案例整理已知有一个表:该表的字段有:id,name,date,gradeid,email,表名为table_name,按要求实现下面内容。1.插入一条记录:inserti...

《快速阅读术》--如何养成阅读的习惯_weixin_30603633的博客-程序员秘密

1. 从可以快速阅读的书开始哪些是可以快速阅读的书?贯穿全书的线索很少,相对独立的章节较多,无论从哪里开始阅读都可以有所收获。和不能快速阅读的书搭配阅读可以快速阅读的书和不能快速阅读的书,比例应该是9:1,每天的阅读时间比例是1:1阅读一本书的时间不能过长阅读一本书的时间不应该超过10天,最好是每天阅读的书都不同。创造一种接连不断阅读各类书籍的氛围,让自己感受到切...

【指纹识别】基于matlab GUI指纹打卡系统【含Matlab源码 867期】_指纹识别源码_海神之光的博客-程序员秘密

21世纪是信息化时代,在这个特殊的时代,我们的生活中电子设备越来越多,比如,笔记本电脑, ATM取款机,考勤系统,门禁系统和各种智能卡,网络中的网上银行,人人网账号等,都需要验证身份。对个人身份识别技术的要求不断提高,如果没有安全可靠和快捷的身份识别技术,电子商务、网上购物等就存在重大隐患。目前许多身份验证系统都采用“用户名+密码”的方式来进行用户访问控制,但此方法存在诸多隐患,比如密码被窃取、破解或遗忘。因此我们在与机器交互时急需一种准确、安全快捷的识别技术来取代现有的身份验证。

我常用的 .zshrc 文件 - oh-my-zsh 自动补齐加 zsh-syntax-highlighting 高亮 加 窗体透明_[oh-my-zsh] plugin 'zsh-syntax-highlighting' not f_zyykkk的博客-程序员秘密

# 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...

servlet学习笔记_两头蛇三脚猫的博客-程序员秘密

教程中的笔记,整理放到博客上。

推荐文章

热门文章

相关标签