python,人工智能,水果识别

1) 需求分析
1.水果数据处理:对水果(苹果,香蕉)数据集进行处理转化为标签和图像,并转化为one-hot码。
2.卷积模型搭建:采用keras搭建模型,卷积层、池化层、Dropout层、全连接层、输出层
3.模型训练把数据集在建立的模型上进行训练,并把最好的模型保存到h5文件中,便于直接对模型进行测试。
4.模型测试:打开摄像头,使用通用物体进行测试。测试结果将录制成视频展示。

2) 概要设计


1.	测试前代码:
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.	主程序:
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)详细设计
改进为可以把文字由英文转中文的代码:
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__':
    capture_camera_pic()


你可能感兴趣的:(python,python)