智能售货系统

课程目标 学习如何使用O...

课程目标

学习如何使用OpenCV进行图像采集,利用百度智能云的图像识别API进行图像识别,并显示识别结果和计算商品价格。最终,学生将能够实现一个简单的智能售货系统。

任务一:捕获视频源

学习如何使用OpenCV捕获视频源。
 

1.安装OpenCV

  • pip install opencv-python

2.捕获视频

import cv2 as cv

# 设置视频源
cap = cv.VideoCapture(0)              # 摄像头
# cap = cv.VideoCapture('tiny.mp4')   # 视频文件
# cap = cv.VideoCapture('http://vjs.zencdn.net/v/oceans.mp4')  # 网络串流
# cap = cv.VideoCapture('https://media.w3.org/2010/05/sintel/trailer.mp4')   
     
while True:                  
    ret, frame = cap.read()       # 获取帧
    cv.imshow('frame', frame)     # 显示帧

    if cv.waitKey(1) == ord('q'):  # 按 'q' 键 退出
        break 

任务二:从视频源截取图像、保存视频

目标:学习如何截取图像并保存视频。

1.截取图像

import cv2 as cv

cap = cv.VideoCapture(0)
while True:
    ret, frame = cap.read()
    cv.imshow('Video', frame)

    # 按 空格 截图
    if cv.waitKey(1) == ord(' '):
        cv.imwrite('captured_image.jpg', frame)
        
    if cv.waitKey(1) == ord('q'):
        break

cap.release()
cv.destroyAllWindows()

2.保存视频

import cv2 as cv

cap = cv.VideoCapture(0)

# 定义视频编码器和输出文件格式
fourcc = cv.VideoWriter_fourcc(*'X264')   # X264:mp4  |  XVID:avi
out = cv.VideoWriter('output.mp4', fourcc, 20.0, (640, 480))

while True:
    ret, frame = cap.read()
    if ret:                   # 获取成功,ret为 True
        out.write(frame)
        cv.imshow('Video', frame)
        
        if cv.waitKey(1) & 0xFF == ord('q'):
            break
    else:
        break

cap.release()
out.release()
cv.destroyAllWindows()

任务三:通用物体和场景识别

目标:学习如何调用百度智能云API进行图像识别。
 
# !pip install baidu-aip     
from aip import AipImageClassify

# 百度AI配置
APP_ID = '93590762'
API_KEY = 'kZRcpHi0w3hrDv24a2KRVrlE'
SECRET_KEY = 'e5EZiDNb4Ltp7POV52v67zvq2asDV5pR'

# 初始化AipImageClassify对象
client = AipImageClassify(APP_ID, API_KEY, SECRET_KEY)

# 读取图像文件
image_path = 'tomato.png'
with open(image_path, 'rb') as f:
    img_data = f.read()
    
# 调用图像识别API
result = client.advancedGeneral(img_data)
print(result)

综合任务:智能售货系统

这个项目将结合OpenCV和百度智能云的图像识别技术,实现一个简单的智能售货系统。
具体包括以下几个部分:
使用OpenCV进行图像采集
调用百度智能云API进行图像识别
显示识别结果并计算价格
import cv2
from aip import AipImageClassify

# 百度AI配置
APP_ID = '93590762'
API_KEY = 'kZRcpHi0w3hrDv24a2KRVrlE'
SECRET_KEY = 'e5EZiDNb4Ltp7POV52v67zvq2asDV5pR'

# 初始化AipImageClassify对象
client = AipImageClassify(APP_ID, API_KEY, SECRET_KEY)

# 调用图像识别API
def recognize_image(image_path):
    # 读取图像文件
    with open(image_path, 'rb') as f:
        img_data = f.read()

    # 调用通用物体和场景识别接口
    result = client.advancedGeneral(img_data)
    return result

# 预定义的商品价格表
price_list = {
    '苹果': 5.0,
    '香蕉': 3.0,
    '橙子': 4.0,
    '西红柿': 2.5,
    '黄瓜': 1.5
}

def calculate_price(recognition_results):
    total_price = 0.0
    for item in recognition_results['result']:
        name = item['keyword']
        if name in price_list:
            total_price += price_list[name]
            print(f"{name}: {price_list[name]}元")
    print(f"总价: {total_price}元")
    return total_price

# 捕捉图像
def capture_image():
    cap = cv2.VideoCapture(0)  # 0表示第一个摄像头
    while True:
        ret, frame = cap.read()
        cv2.imshow('Press Space to Capture', frame)
        if cv2.waitKey(1) & 0xFF == ord(' '):  # 按空格键捕捉图像
            cv2.imwrite('captured_image.png', frame)
            break
    cap.release()
    cv2.destroyAllWindows()

# 主程序
if __name__ == '__main__':
    capture_image()  # 捕捉图像
    result = recognize_image('tomato.png')  # 识别图像
    calculate_price(result)  # 计算价格