我的编程空间,编程开发者的网络收藏夹
学习永远不晚

imageAI图像识别,并用pytho

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

imageAI图像识别,并用pytho

imageai是一套开源免费的,可以用于图像智能识别的python应用包,使用门槛不高,基本上按照官方文档去写就可以简单实现利用已经训练好的模型识别图像中的物体。
imageai图像预检目前实现了四种模型的算法支持,分别是SqueezeNet,ResNet,InceptionV3 和 DenseNet。不同的包对应的训练模型大小不一致,精度也不一致。

  • SqueezeNet(文件大小:4.82 MB,预测时间最短,精准度适中)
  • ResNet50 by Microsoft Research (文件大小:98 MB,预测时间较快,精准度高)
  • InceptionV3 by Google Brain team (文件大小:91.6 MB,预测时间慢,精度更高)
  • DenseNet121 by Facebook AI Research (文件大小:31.6 MB,预测时间较慢,精度最高)

imageai不仅可以用于图像识别,还可以进行图形对象检测,视频对象预测和跟踪,自定义训练模型等。对于机器学习不够深入的人员非常友好,可以几行代码实现一个AI应用。

更多深入的内容可以查看原文

下面,简单了解一下如何在python本地服务中搭建一个图像识别应用。

安装imageAI的依赖

imageAI的依赖

python(>=3.5.1)
tensorflow(>=1.4.0)
Numpy(>=1.13.1)
SciPy(>=0.19.1)
openCv
pillow
matplotlib
h5py
keras

若安装好了pip3 可以直接运行 pip3 install tensorflow numpy scipy opencv-python pillow matplotlib h5py keras imageai

imageAI的训练模型

imageAI支持使用在ImageNet-1000数据集上训练的4种不同的机器学习算法,也支持在CoCo数据集集上训练的对象检测。

图像预检

需要下载一个训练模型。

这里就直接使用facebookAI的训练模型DenseNet121。

废话不多说,上代码:

from imageai.Prediction import ImagePrediction
import os,json

execution_path = os.getcwd() # 当前命令行执行路径
prediction = ImagePrediction() # 获取这个图像预测实例
prediction.setModelTypeAsDenseNet() # facebook AI,此处要根据下一步加载的模型文件来确立对应的model类型,其他还有setModelTypeAsSqueezeNet(普通) setModelTypeAsResNet(微软模型) setModelTypeAsInceptionV3(谷歌模型),训练识别精确度依次提升,facebook最准确
prediction.setModelPath(os.path.join(execution_path, "DenseNet-BC-121-32.h5")) # 加载模型文件,就是刚刚下载好的那个
prediction.loadModel(prediction_speed="fast") # 速度调节,如果配置这个则需要使用精确度较高的模型,否则会出现识别率下降的问题
predictions, probabilities =prediction.predictImage(os.path.join(execution_path, "test.jpg"), result_count=6) # 对应的图像识别路径,以及相应的返回结果数量
predictionDict = {}
for eachPrediction, eachProbability in zip(predictions, probabilities):
     predictionDict[eachPrediction] = eachProbability
res = json.dumps(predictionDict)

print(res) # 输出结果
虽然这里设置了"fast",但其实对于单核来说运行速度仍然比较慢,如果你的运行服务器是多核的,可以试试并行计算,把多个核都用起来,效率会有不少提升。

代码对应行都有相应注释,看一下打印结果:

{"loudspeaker": 33.06401073932648, "modem": 26.803183555603027, "hard_disc": 7.0777274668216705, "projector": 4.804840311408043, "lighter": 2.9418328776955605, "electric_fan": 1.8662691116333008}

返回的是key-value的json格式,key代表物品名,value代表可能性性百分比数值,最高100,最低0,分别表示准确识别和不可能,由于训练模型使用的是FacebookAI类型的,所以标签名也是英文的,这对于中文用户来说可能需要一个转译的过程。

如何使用python进行中英文翻译,这里不赘述,pip安装googletrans试试看,不过需要翻墙。

好了,基本的识别逻辑有了,我们可以搭建一个http服务,使用get请求来接收一个图片文件名,然后让Python帮我们识别上传的图片里都有什么内容。

上代码:

from http.server import HTTPServer,BaseHTTPRequestHandler
import io,shutil,urllib
from imageai.Prediction import ImagePrediction
import os,json

class MyHttpHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        name=""
        if '?' in self.path:
            self.queryString=urllib.parse.unquote(self.path.split('?',1)[1])
            #name=str(bytes(params['name'][0],'GBK'),'utf-8')
            params=urllib.parse.parse_qs(self.queryString)
            name=params["name"][0] if "name" in params else None
        r_str=name
        enc="UTF-8"
        encoded = ''.join(r_str).encode(enc)
        if name:
            execution_path = os.getcwd()
            if execution_path == '' or execution_path == '/':
                execution_path = '/www-root/blog' # 因为网关模式执行Python可能导致当前执行路径为'/'或者空的情况。
            prediction = ImagePrediction()
            
            prediction.setModelTypeAsDenseNet() # facebook AI
            prediction.setModelPath(os.path.join(execution_path, "DenseNet-BC-121-32.h5"))
          
            prediction.loadModel(prediction_speed="fast")
            predictions, probabilities = prediction.predictImage(os.path.join(execution_path, "image/"+name), result_count=3)
            predictionDict = {}
            for eachPrediction, eachProbability in zip(predictions, probabilities):
                predictionDict[eachPrediction] = eachProbability
            res = json.dumps(predictionDict)
            encoded = ''.join(res).encode(enc)
        f = io.BytesIO()
        f.write(encoded)
        f.seek(0)
        self.send_response(200)
        self.send_header("Content-type", "text/html; charset=%s" % enc)
        self.send_header("Content-Length", str(len(encoded)))
        self.end_headers()
        shutil.copyfileobj(f,self.wfile)


httpd=HTTPServer(('',8080),MyHttpHandler)
print("Server started on 127.0.0.1,port 8080.....")
httpd.serve_forever()

在服务器运行python3 你的脚本名.py就可以完美运行啦!

curl -X GET 'http://127.0.0.1:8080?name=IMG_8590.JPG'
# response
{"loudspeaker": 33.06401073932648, "modem": 26.803183555603027, "hard_disc": 7.0777274668216705, "projector": 4.804840311408043, "lighter": 2.9418328776955605, "electric_fan": 1.8662691116333008}

结尾

本文只介绍了图像识别以及如何加在python http server中方便内部调用,其实还可以做得更多,比如图形对象检测,视频对象跟踪等,你也可以自定义训练模型,按照对应的4种算法处理模型数据,搞一个自定义AI产品。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

imageAI图像识别,并用pytho

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

imageAI图像识别,并用pytho

imageai是一套开源免费的,可以用于图像智能识别的python应用包,使用门槛不高,基本上按照官方文档去写就可以简单实现利用已经训练好的模型识别图像中的物体。imageai图像预检目前实现了四种模型的算法支持,分别是SqueezeNet
2023-01-31

Python基于ImageAI实现图像识别详解

ImageAI是一个面向计算机视觉编程的Python库,支持最先进的机器学习算法。本文将利用ImageAI实现图像识别功能,感兴趣的小伙伴可以跟随小编一起学习一下
2023-02-01

【python 图像识别】图像识别从菜鸟

一、安装配置(python2.7)1.pip install pytesseract2、pip install pyocr3、pip install pillow4、安装tesseract-ocr:http://jaist.dl.sourc
2023-01-31

Python3 图像识别(二)

Infi-chu:http://www.cnblogs.com/Infi-chu/以图搜图的使用已经非常广泛了,我现在来介绍一下简单的以图搜图的相关算法及其实践。一、感知hash算法感知哈希算法:感知哈希算法(Perceptual hash
2023-01-30

Python3 图像识别(一)

Infi-chu:http://www.cnblogs.com/Infi-chu/一、环境准备:1.Python3.x(我是用的是Python3.6.5),这个问题不大,只要3.4以上就OK。2.Numpy(直接pip安装即可)pip in
2023-01-30

Python怎么识别图像

这篇文章主要介绍“Python怎么识别图像”,在日常操作中,相信很多人在Python怎么识别图像问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python怎么识别图像”的疑惑有所帮助!接下来,请跟着小编一起来
2023-06-17

怎么利用PyTorch实现图像识别

这篇文章主要介绍“怎么利用PyTorch实现图像识别”,在日常操作中,相信很多人在怎么利用PyTorch实现图像识别问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么利用PyTorch实现图像识别”的疑惑有所
2023-07-05

java图像识别技术怎么应用

Java图像识别技术可以应用于多个领域,包括但不限于以下几个方面:人脸识别:可以使用Java图像识别库来开发人脸识别系统,用于身份验证、门禁控制、相册管理等应用。OCR(光学字符识别):通过Java图像识别技术,可以将图片中的文字内容转化为
2023-10-27

Python中AI图像识别实现身份证识别

目录需求分析步骤申请华为云OCR接口获取token调用身份证识别接口总结图像识别说白了就是把一张照片上面的文字进行提取,提供工作效率 需求分析 身份证识别主要是把一张身份证照片上面的文字信息进行提取,不用再使用人工去手动抄写了,下面给大家说
2022-06-02

Android图片处理:识别图像方向并显示实例教程

在Android中使用ImageView显示图片的时候发现图片显示不正,方向偏了或者倒过来了。 解决这个问题很自然想到的分两步走: 1、自动识别图像方向,计算旋转角度; 2、对图像进行旋转并显示。一、识别图像方向 首先在这里提一个概念EXI
2022-06-06

如何用 Python 进行 OCR 图像识别

这篇文章主要介绍“如何用 Python 进行 OCR 图像识别”,在日常操作中,相信很多人在如何用 Python 进行 OCR 图像识别问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何用 Python 进行
2023-06-15

PyTorch怎么实现图像识别

这篇文章主要介绍“PyTorch怎么实现图像识别”,在日常操作中,相信很多人在PyTorch怎么实现图像识别问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”PyTorch怎么实现图像识别”的疑惑有所帮助!接下来
2023-06-29

Java如何使用Tess4J实现图像识别

这篇文章主要为大家展示了“Java如何使用Tess4J实现图像识别”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Java如何使用Tess4J实现图像识别”这篇文章吧。Java Tess4J实现图
2023-06-25

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录