用101000张食物图片实现图像识别(数据的获取与处理)-python-tensorflow框架
前段时间,日剧《轮到你了》大火,作为程序员的我,看到了另外一个程序员—二阶堂,他的生活作息,以及饮食规律,让我感同身受,最让我感触的是他做的AI聊天机器人,AI菜品分析机器人,AI罪犯分析。
这让作为程序员的我突然萌生了一股攀比和一种激情,我也得做一个出来(小声bb,都得尝试下):
于是,我想从相对简单的做起,《AI菜品分析机器人》:
AI菜品分析机器人:
1.建立语料库,爬取各个网站的对话和问答,这里我采用的是知乎以及调用api获取实时对话,至于代码的话我这里就不放了,涉及比较多,我这里侧重点是图像识别,大概获取了将近4万条数据,
这里给出部分结果:

2.关于图像识别:
1.图像训练需要极大的数据,我这里找了很久,通过各种手段,找到了kaggle比赛曾用过的101000张图片,里面有101种食物图片,如下(部分)

类似于上述图片,每一个图片都是都是对应得食物,我们需要提取每一张图片的特征值。
2.我们可以看出上述图片,大小不一,还具有色彩,我们特征值提取,是将图片进行矩阵化,所以我们在这里需要将图片变成大小一样,并且灰度处理。这里我们解释下:
将图片处理成大小一样:我们训练数据的时候是将图片矩阵化,如果图片大小不一样,我们得矩阵大小就不一样,所以在训练得时候会有问题,为了简单方便,我们直接将其同一化:
import numpy as np
from PIL import Image
img =Image.open("F:/images/baby_back_ribs/"+i).convert('L')
img=img.resize((512,512))
img.save("F:/baby_back_ribs28/"+i)
这里,我们通过img =Image.open("F:/images/baby_back_ribs/"+i).convert('L')将图片灰度处理,然后img=img.resize((512,512))处理图片为512,512,最后保存:

可以看出,我们处理过后得图片如上,得出这样的图片后,我们就可以用来作为数据了
3.我们将我们获取的灰度图片矩阵化:
for i in range(512):
for j in range(512):
pixel=1.0-float(img.getpixel((j,i)))/255.0
所以我们可以将其矩阵化:

每张图片有512*512个数据,我们这里是将一个二维矩阵扁平化为一维矩阵。所以我们可以将这101000张图片所有数据都矩阵化,然后测试算法。
具体的代码,还在测试中,目前遇到得问题比较多,正在一步一步处理,后面会继续更新,下面给出我遇到的一些问题和解决:
1.数据的获取:这101000张图片我找了很久才找到的数据(约有5个g)。
2.数据量比较大,在处理的时候容易出错,所以大家在写的时候一定要仔细,最好把源图复制一份,保留下来。
3.图片特征比较多,普通的算法难以满足,容易出现过拟合现象,而且1000张图也不算特别多,准确率较低,容易识别出错。
4.在实现矩阵算法的时候,每次带入100张图片进行训练,注意图片维度,以及图片长度。
等数据测试稳定后会放出源码让大家学习。
持续更新中,希望大家留意后面的博客.....
用101000张食物图片实现图像识别(数据的获取与处理)-python-tensorflow框架的更多相关文章
- 食物图片变菜谱:这篇CVPR论文让人人都可以学习新料理
根据 Facebook 的统计,Instgram 上的美食图片数量已经超过 3 亿张.然而,获取食物烹饪方法的途径依然有限,例如,通过烹饪网站或相关教程.怎样能够挖掘丰富食物图片背后的烹饪方法,让每个 ...
- Atitit 判断判断一张图片是否包含另一张小图片
Atitit 判断判断一张图片是否包含另一张小图片 1. keyword1 2. 模板匹配是在图像中寻找目标的方法之一(切割+图像相似度计算)1 3. 匹配效果2 4. 图片相似度的算法(感知哈希算 ...
- 【Python网络爬虫四】通过关键字爬取多张百度图片的图片
最近看了女神的新剧<逃避虽然可耻但有用>,同样男主也是一名程序员,所以很有共鸣 被大只萝莉萌的一脸一脸的,我们来爬一爬女神的皂片. 百度搜索结果:新恒结衣 本文主要分为4个部分: 1.下载 ...
- 读取多张MNIST图片与利用BaseEstimator基类创建分类器
读取多张MNIST图片 在读取多张MNIST图片之前,我们先来看下读取单张图片如何实现 每张数字图片大小都为28 * 28的,需要将数据reshape成28 * 28的,采用最近邻插值,如下 def ...
- 音视频入门-18-手动生成一张GIF图片
* 音视频入门文章目录 * GIF 编码知识 GIF 包含的数据块: 文件头(Header) 逻辑屏幕标识符(Logical Screen Descriptor) 全局颜色表(Global Color ...
- (第二章第二部分)TensorFlow框架之读取图片数据
系列博客链接: (第二章第一部分)TensorFlow框架之文件读取流程:https://www.cnblogs.com/kongweisi/p/11050302.html 本文概述: 目标 说明图片 ...
- Atitit.java图片图像处理attilax总结 BufferedImage extends java.awt.Image获取图像像素点image.getRGB(i, lineIndex); 图片剪辑/AtiPlatf_cms/src/com/attilax/img/imgx.javacutImage图片处理titit 判断判断一张图片是否包含另一张小图片 atitit 图片去噪算法的原理与
Atitit.java图片图像处理attilax总结 BufferedImage extends java.awt.Image 获取图像像素点 image.getRGB(i, lineIndex); ...
- java图片处理——多张图片合成一张Gif图片并播放或Gif拆分成多张图片
1.多张jpg图合成gif动画 /** * 把多张jpg图片合成一张 * @param pic String[] 多个jpg文件名 包含路径 * @param newPic String 生成的gif ...
- 一张png图片 上面有多个图标,如何用CSS准确的知道其中某个图片的坐标
一张png图片 上面有多个图标,如何用CSS准确的知道其中某个图片的坐标 ,如下图 可以使用 background background:url(images/xx.png) 40px 10px n ...
随机推荐
- Javascript实现简单地发布订阅模式
不论是在程序世界里还是现实生活中,发布—订阅模式的应用都非常广泛.我们先看一下现实中的例子. 小明最近看上了一套房子,到了售楼处之后才被告知,该楼盘的房子早已售罄.好在售楼MM告诉小明,不久后还有一些 ...
- CSV Data Set Config 拓展开发
1.目的 在日常的性能测试项目中,经常会遇到参数化的问题,我们所熟知的LR工具对参数化支持非常友好,然而JMeter相对逊色一些.大家都知道在使用JMeter工具参数化时常用CSV Data Set ...
- Spring Cloud与Dubbo的完美融合之手「Spring Cloud Alibaba」
很早以前,在刚开始搞Spring Cloud基础教程的时候,写过这样一篇文章:<微服务架构的基础框架选择:Spring Cloud还是Dubbo?>,可能不少读者也都看过.之后也就一直有关 ...
- 腾讯PCG(后台开发) 牛客网视频面试 一面
腾讯视频面试 作为一个小渣渣记录一下,腾讯是我一直想进的公司,但其实准备的时间不是很长,也不是科班还是存在很大的劣势,记录一下找工作的经历. 首先说一下,这是我第一次视频面试,还是蛮紧张的.不过面试官 ...
- Ubuntu Server : 自动更新
Ubuntu(16.04/18.04) 默认会每天自动安装系统的安全更新,但是不会自动安装包的更新.本文梳理 Ubuntu 16.04/18.04 系统的自动更新机制,并介绍如何配置系统自动更新所有的 ...
- Nacos(三):Nacos与OpenFeign的对接使用
前言 上篇文章中,简单介绍了如何在SpringCloud项目中接入Nacos作为注册中心,其中服务消费者是通过RestTemplate+Ribbon的方式来进行服务调用的. 实际上在日常项目中服务间调 ...
- c++的构造和析构
//文件名ss.h 1 #pragma once class ss { private: char*p;//利用指针来为p申请对内存 float height; ; char sex; public: ...
- git之旅,畅游git的世界
今天小铭酱带大家探索一下git的奥秘! 1.初步探索 首先我在一个空的文件夹新建了一个名叫hello.html文件,文件内容只有一句话“hello git”.我们先引入git,看看git能为我们它能干 ...
- day0203
day02 1.for i in range() --->用于设置for循环的迭代设置. ranage 也是一个前闭后开的. 2.random.randrange() --->随机产生给予 ...
- Maven项目添加ojdbc8
1.找到Oracle中的ojdbc8,它的位置在Oracle客户端 2.找到它的位置后,把你放ojdbc8的位置复制,改如下代码"D:\ojdbc8.jar"为你的ojdbc8位置 ...