使用Tensorflow从0开始搭建精灵宝可梦的检测APP

本文为本人原创,转载请注明来源链接

环境要求

Tensorflow1.12.0

cuda 9.0

python3.6.10

Android Studio

Anaconda

安装Tensorflow

使用conda 安装GPU版Tensorflow

conda install tensorflow-gpu=1.12.0

找到tensorflow的安装位置

我的位置在: home/jiading/.conda/envs/tensorflow12/lib/python3.6/site-packages/tensorflow

通过conda安装的tensorflow是不包括models这一模块的,需要从Github上下载: https://github.com/tensorflow/models

将它克隆到tensorflow文件夹下:

打开models\research\object_detection,按照https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/installation.md提示的进行安装

运行 python object_detection/builders/model_builder_test.py 测试是否安装成功

下载和处理数据集

我们采用的数据集是https://www.kaggle.com/lantian773030/pokemonclassification。如果你使用colab训练,可以直接将数据集下载到colab中: https://blog.csdn.net/qq_35654046/article/details/87621396

原始的数据集只有图像和类别,可以用于分类,但是用于目标检测的话需要在此基础上进一步标定数据,在图像中框出神奇宝贝的位置。

这里我们使用labelme这个软件进行标定。labelme可以直接通过pip安装: pip install labelme -i https://pypi.tuna.tsinghua.edu.cn/simp le

在终端(Bash和Windows的Powershell都可以)中直接输出Labelme即可打开软件.labelme的简单教程可以看这里: https://www.cnblogs.com/wangxiaocvpr/p/9997690.html

标定数据后,我们在各个神奇宝贝的文件夹中得到了和原图像同名的 Json 文件:

打开json文件,我们可以看到有很长的imageData:

这其实就是对原图像的储存,所以我们之后处理时只需要这个json文件即可,由此可以还原出原图像

如果要达到比较好的效果,要标定的数据还是不少的。

将labelme转换为voc格式

我们最终要把数据集转换为tfrecord,但是在此之前我们需要将其转换为规范的voc格式,以便于再转为tfrecord

最后得到VOC格式的数据如下:

注意原项目的代码中有一两个小bug,这其实无伤大雅,改了就好了,但是原项目没有生成val数据集的功能,只能生成training和test.所以我改了一点:

原来的split_dataset只有 test_ratio :测试集比例,我加上了'val_ratio'

注意,其实理论上可以直接用这个 工具 生成coco形式的数据,然后使用tensorflow中tensorflow/models/research/object_detection/dataset_tools/create_coco_tf_record.py来生成tfrecord,但在我实际使用中发现create_coco_tf_record.py制作出来的是分散的数据,如下:

当然人家在代码中也说了: Please note that this tool creates sharded output files. ,是我自己没仔细看。这个格式应该也是能用的,但是我目前不知道方法,所以最后就没有用这个方法

将voc格式数据转换为tfrecord

最终我采用的是这篇博客中的代码,生成的tfrecord如下:

开始训练

这里我训练使用的是Tensorflow lite教程中推荐的COCO SSD MobileNet v1:

当然也可以不选择预训练模型,而是从头训练。这样的话就不需要下载上面的文件,你只需要一个config文件即可。该网络的config文件在object_detection/samples/config/ssd_mobilenet_v1_coco.config。如何配置依然可以看这篇博文: https://www.cnblogs.com/gezhuangzhuang/p/10613468.html

训练完成后,我们就可以在train_dir中看到得到的模型:

导出图

我们可以使用object_detection下的export_inference_graph.py导出图,但是对于ssd模型, 官方推荐 使用export_tflite_ssd_graph.py(亲测用上面的那个脚本导出的模型无法转换为tflite格式):

python export_tflite_ssd_graph.py --input_type image_tensor --pipeline_config_path /home/jiading/Pokemon/ssd_mobilenet_v1_0.75_depth_300x300_coco14_sync.config --trained.checkpoint_prefix /home/jiading/Pokemon/train/model.ckpt-2955 --output_directory /home/jiading/Pokemon/frozen_inference_graph.pb -add_postprocessing_op True --max_detection 10

测试

我们可以使用tensorflow的object_detection自带的jupyter notebook脚本来做测试:

将PATH_TO_FROZEN_GRAPH改为pb文件的位置

需要一个labelmap文件,内容如下:

用一个脚本很容易写出来,这个就不提了

加载一张图片

运行结果

转换为tensorflow lite模型

~/.conda/envs/tensorflow12/lib/python3.6/site-packages/tensorflow/models/research/object_detection$ tflite_convert --output_file=/home/jiading/Pokemon/tflite/detect.tflite --graph_def_file=/home/jiading/Pokemon/frozen_inference_graph/tflite_graph.pb --input_arrays='normalized_input_image_tensor' --output_arrays='TFLite_Detection_PostProcess','TFLite_Detection_PostProcess:1','TFLite_Detection_PostProcess:2','TFLite_Detection_PostProcess:3' --input_shape=1,300,300,3 --allow_custom_ops

部署在安卓端

安卓的例子在 ObjectDetection-Android\examples-master\lite\examples\object_detection\android 下,打开后我们首先需要制作一个labelmap:

原本的例子会利用gradle下载模型,我们可以将地址替换掉

,将我们自己的这两个文件放进去:

部署时可能遇到的bug

import numpy as np

import tensorflow as tf

# Load TFLite model and allocate tensors.

interpreter = tf.contrib.lite.Interpreter(model_path="")

interpreter.allocate_tensors()

input_details = interpreter.get_input_details()

output_details = interpreter.get_output_details()

print(input_details)

print(output_details)

像我之前在导出图时设置的 --max_detection 5 ,但是看输出发现:

上面是我的,下面是原本模型的,改为10后再导出就没有问题了

如果还有问题,可以考虑将DetectorActivity中的 private static final boolean TF_OD_API_IS_QUANTIZED 设置为false。同时,如果出现维度错误,可以考虑修改TFLiteObjectDetectionAPIModel.java下的 private static final int NUM_DETECTIONS

最终效果:

一点点换皮

将原项目中的图标和软件名换掉之后:

宝可梦 图片识别python_使用Tensorflow从0开始搭建精灵宝可梦的检测APP相关推荐

  1. 宝可梦 图片识别python_初探利用Python进行图文识别(OCR)

    话说什么是OCR????? 简介 OCR技术是光学字符识别的缩写(Optical Character Recognition),是通过扫描等光学输入方式将各种票据.报刊.书籍.文稿及其它印刷品的文字转 ...

  2. 【深度学习】环境搭建—TensorFlow 2.0环境搭建

    前沿: 本来想是搭建一个本地环境,可是在安装过程中需要 cuda 10.0 ,而我安装的是 cuda 10.1 不匹配.所以就寻思着安装了一个 docker,使用容器化安装. Created with ...

  3. mnist手写数字识别python_基于tensorflow的MNIST手写数字识别(二)--入门篇

    一.本文的意义 因为谷歌官方其实已经写了MNIST入门和深入两篇教程了,那我写这些文章又是为什么呢,只是抄袭?那倒并不是,更准确的说应该是笔记吧,然后用更通俗的语言来解释,并且补充更多,官方文章中没有 ...

  4. python画哆啦a梦图片_80行代码!用Python做一个哆来A梦分身

    原标题:80行代码!用Python做一个哆来A梦分身 对于分身术,大家想必都或多或少的从<火影忍者>的动漫上看到过,炫酷的影分身场面,每每看到都觉得非常过瘾. 今天, 小编其实是蓝胖子的铁 ...

  5. 有道智云OCR图片识别文字+返回数据处理技巧(实现语言-按键精灵脚本请求识别+java服务端处理数据)

    一.[开始] 1.按键精灵android手机脚本 1.1.截取手机上指定范围内的图片,通过api上传到有道智云处理后返回识别后的JSON格式数据. 1.2.代码 Import "ShanHa ...

  6. TF之LoR:基于tensorflow利用逻辑回归算LoR法实现手写数字图片识别提高准确率

    TF之LoR:基于tensorflow利用逻辑回归算LoR法实现手写数字图片识别提高准确率 目录 输出结果 设计代码 输出结果 设计代码 #TF之LoR:基于tensorflow实现手写数字图片识别准 ...

  7. TensorFlow 2.0 快速上手教程与手写数字识别例子讲解

    文章目录 TensorFlow 基础 自动求导机制 参数优化 TensorFlow 模型建立.训练与评估 通用模型的类结构 多层感知机手写数字识别 Keras Pipeline * TensorFlo ...

  8. 2022.04精灵宝可梦国内在线观看渠道整理

    目前只整理TV版 精灵宝可梦无印(EP) 271话 哔哩哔哩 精灵宝可梦超世代(AG) 188话 哔哩哔哩 精灵宝可梦钻石与珍珠(DP) 185话 哔哩哔哩 精灵宝可梦超级愿望(BW) 144话 哔哩 ...

  9. 精灵宝可梦剑正在维护服务器,最期待在《精灵宝可梦:剑/盾》中保留/回归的玩法功能...

    对于<精灵宝可梦>这种长寿系列作品来说,随着时间发展和技术进步,无论是画面还是玩法都必然会出现巨大改动.一些新创意加入,一些旧元素离开,虽然改变总是好事,但在<精灵宝可梦>系列 ...

最新文章

  1. c++自带的可持久化平衡树?rope大法好!(超详细解答 + 5道例题讲解,可直接替代可持久化的线段树、并查集、平衡树!)
  2. 使用tortoise git管理gitolite版本库
  3. 【 FPGA 】UltraFast设计方法学笔记(RTL代码风格2)
  4. MAC 下SVN 删除文件失败 提示emains in tree-conflict
  5. 磨砂串口服务器型号,MOXA串口服务器 NPort 5630-16,RS-422/485
  6. DELL 控制卡做raid
  7. 计算机二级c语言题库缩印,计算机二级C语言上机题库(可缩印做考试小抄资料)...
  8. Java高级开发工程师面试考纲
  9. 多个路由指向同一个页面_Flutter路由导航
  10. python黑帽子编程实现没网流量抓包和统计_《Python黑帽子》python3代码实现(第三章)...
  11. mfc获取计算机的连接端口,[求助]请问socket编程里,服务器端用什么函数获取客户端的地址与端口...
  12. python图形绘制星空图_天文星空图谱开源软件Stellarium
  13. 计算机工程学院运动会加油稿50字,校园运动会加油稿50字
  14. 传奇服务器 地图文件,[技术贴]地图配置文件
  15. HarmonyOS电脑系统,HarmonyOS
  16. c语言六级,2017年英语六级写作谚语(C开头)
  17. 电蚊拍一天用30-50次?
  18. kindeditor 自定义上传图片
  19. 显示器U2518怎么连服务器,【戴尔 U2518D 显示器使用感受】尺寸|分辨率|边框|底座|颜色_摘要频道_什么值得买...
  20. 《计算机网络-谢希仁》读书笔记---概述

热门文章

  1. QCOM audio
  2. 周颖杰计算机学院,周颖杰到教务处(评估与质量监控办公室)调研指导工作
  3. TCP之TIMEWAIT过多
  4. 【转】计算机领域的学术会议等级排名情况
  5. Bug2021.01.07 Unity WebGL包 内网映射外网 图片下载不了
  6. 设计师常用素材+学习视频,记得收好啦
  7. 计算机网络stp和utp,网线STP和UTP有什么区别
  8. Nand flash基本原理
  9. IMT-2020工作组制定五步发展计划:与3GPP保持标准制定同步
  10. 2019全国计算机大赛二等奖,喜讯!这次是2019年TI杯全国大学生电子设计竞赛全国二等奖...