前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python实现人工智能识别水果

python实现人工智能识别水果

原创
作者头像
码农向前冲
发布2021-12-21 17:26:39
1.2K0
发布2021-12-21 17:26:39
举报
文章被收录于专栏:Python学习必看

1) 需求分析

1.水果数据处理:对水果(苹果,香蕉)数据集进行处理转化为标签和图像,并转化为one-hot码。

2.卷积模型搭建:采用keras搭建模型,卷积层、池化层、Dropout层、全连接层、输出层

3.模型训练把数据集在建立的模型上进行训练,并把最好的模型保存到h5文件中,便于直接对模型进行测试。

4.模型测试:打开摄像头,使用通用物体进行测试。测试结果将录制成视频展示。

2) 概要设计

1. 测试前代码:
代码语言:javascript
复制
from keras.applications.resnet50 import ResNet50  #//导入AI软件平台keras 里的AI模型 ResNet50
from keras.preprocessing import image#//导入图像处理库 image
from keras.applications.resnet50 import preprocess_input, decode_predictions
import numpy as np

#//载入模型
model = ResNet50(weights='imagenet')  #//使model指向ResNet50模型
img_path = '鸟.jpg'     #//等待识别的图像(可用车,水果等),注:需把图片放该代码的同目录下
img = image.load_img(img_path, target_size=(224, 224))   #//载入图像
    #//-图像的预处理
x = image.img_to_array(img)     #//把图像转换为数组
x = np.expand_dims(x, axis=0)   #//沿轴0(行)扩展 -> 多维数组
x = preprocess_input(x)         #//做输入预处理

#//预测
preds = model.predict(x)  #//运行模型进行预测
print('Predicted:', decode_predictions(preds, top=3)[0])  #//解码预测,输出结果
2. 主程序:
代码语言:python
代码运行次数:0
复制
import cv2
from keras.applications.resnet50 import ResNet50
from keras.preprocessing import image
from keras.applications.resnet50 import preprocess_input, decode_predictions
import numpy as np

img_path = 'capyure.jpg'


def capture_camera_pic():
cv2.namedWindow('capture_pic')
cp = cv2.VideoCapture(0)  # //指定摄像头,默认0指向第一个
while cp.isOpened():  # //检测摄像头是否打开,如果摄像头能成功打开,则进行循环的视频拍照显示
    ok, frame = cp.read()  # 读取一帧数据
    if not ok:  # 如果拍照失败,退出
        break


    cv2.imwrite(img_path, frame)  # 保存图像

    # 翻译
    # translator = Translator(to_lang='chinese')
    # translation = translator.translate(jieguo())

    cv2.putText(frame, jieguo(), (30, 50), cv2.FONT_HERSHEY_COMPLEX, 1, (255, 0, 0), 4)
    cv2.imshow('capture_pic', frame)  # 显示图像
    c = cv2.waitKey(10)
    if c & 0xff == ord('q'):
        break
cp.release()
cv2.destroyAllWindows()


def jieguo():
model = ResNet50(weights='imagenet')
img_path = 'capyure.jpg'
img = image.load_img(img_path, target_size=(224, 224))

x = image.img_to_array(img)
x = np.expand_dims(x, axis=0)
x = preprocess_input(x)
preds = model.predict(x)

return decode_predictions(preds, top=3)[0][0][1];


if __name__ == '__main__':
capture_camera_pic()
}

3)详细设计

代码语言:python
代码运行次数:0
复制
改进为可以把文字由英文转中文的代码:
import cv2
from keras.applications.resnet50 import ResNet50
from keras.preprocessing import image
from keras.applications.resnet50 import preprocess_input,decode_predictions
import  numpy  as np
from translate import  Translator
from PIL import Image, ImageDraw, ImageFont
#调用摄像头
img_path='capyure.jpg'
def capture_camera_pic():
cv2.namedWindow('capture_pic')
cp=cv2.VideoCapture(0) #//指定摄像头,默认0指向第一个
while cp.isOpened():      #//检测摄像头是否打开,如果摄像头能成功打开,则进行循环的视频拍照显示
    ok,frame=cp.read()   #读取一帧数据
    if not ok:    #如果拍照失败,退出
        break


    cv2.imwrite(img_path,frame)  #保存图像
    #cv2.putText(frame,jieguo(),(30,50),cv2.FONT_HERSHEY_COMPLEX,1,(255,0,0),4)
    #cv2.putText(frame,jieguo(),(30,50), cv2.FONT_HERSHEY_SCRIPT_SIMPLEX,1,(255,0,0),4)
    change()
   # change_cv2_draw(frame, jieguo(), (0,0), 20, (255, 0, 0))
   # cv2ImgAddText(frame, "封", 10, 65, (255, 0, 0), 20)
    #//cv2.imshow('capture_pic',frame)         #显示图像
    c=cv2.waitKey(5)
    if c & 0xff == ord('q'):


     break
cp.release()
cv2.destroyAllWindows()


def jieguo():
       model = ResNet50(weights='imagenet')
       img_path = 'capyure.jpg'
       img = image.load_img(img_path, target_size=(224, 224))

       x = image.img_to_array(img)
       x = np.expand_dims(x, axis=0)
       x = preprocess_input(x)
       preds = model.predict(x)

       translator = Translator(to_lang='chinese')
       str =decode_predictions(preds, top=3)[0][0][1]
       translation = translator.translate(str.replace('_', ' '))
       return translation;

def change():
# 读取文件
pil_img = Image.open('capyure.jpg',)
# 读取cv2文件
#frame = Image.fromarray(cv2.cvtColor(img_path, cv2.COLOR_BGR2RGB))
# pil_img.show()
# 生成画笔
draw = ImageDraw.Draw(pil_img)
# 第一个参数是字体文件的路径,第二个是字体大小
font = ImageFont.truetype('msyh.ttc', 30, encoding='utf-8')
# 第一个参数是文字的起始坐标,第二个需要输出的文字,第三个是字体颜色,第四个是字体类型
draw.text((30,50), jieguo(), (0, 0, 0), font=font)


# PIL图片转cv2
img = cv2.cvtColor(np.array(pil_img), cv2.COLOR_RGB2BGR)
# 变得可以拉伸 winname 必须要一样,且设置可以拉伸在前面
cv2.namedWindow('capture_pic', cv2.WINDOW_NORMAL)
# 显示
cv2.imshow("capture_pic", img)
# 等待
cv2.waitKey(10)

if __name__=='__main__':

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1) 需求分析
  • 2) 概要设计
  • 3)详细设计
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档