5946| 12
|
[项目] DF小黑盒变身---神奇宝贝图鉴 |
一、项目介绍: 作为一个资深神奇宝贝迷老爸,每部关于精灵宝可梦的电影和动画片必看;《大侦探皮卡丘》讲述了蒂姆·古德曼为寻找下落不明的父亲来到莱姆市,意外与父亲的前宝可梦搭档大侦探皮卡丘相遇,并惊讶地发现自己是唯一能听懂皮卡丘说话的人类,他们决定组队踏上揭开真相的刺激冒险之路得故事。每次欣赏完大片,各种玩具和图鉴等衍生产品成了必买选择;老爸荷包严重缩水,授人以鱼不如授人以渔,趁假期和孩子一起造《神奇宝贝图鉴》,捕获属于自己的神奇宝贝。 小伙伴们,快来辨别和收服现实世界中的动物们吧。 二、项目功能及运行流程 三、硬件清单 1.DF小黑盒 *1 3.OLED屏 *1 https://www.dfrobot.com.cn/goods-2688.html 4.碰撞传感器(左右皆可)*1 https://www.dfrobot.com.cn/goods-638.html 四、硬件连接 1.连接OLED屏幕 2.连接碰撞开关 3.连接树莓派摄像头 五、调试代码 代码运行思路如下 设置系统自动运行程序,按按钮拍照屏幕显示照片;识别照片,屏幕反馈结果。 1.程序为python 3.7.3版本 导入库文件,和显示图形和屏幕输出文字函数三个函数解析: shape()、animal_pt(anim) 、 shape_1() 特别注意animal_pt(anim)的句子 font = ImageFont.truetype('simkai.ttf', 20) simkai.ttf为字体库 ,可以下载,也可以在系统的字体文件夹直接拷贝 [mw_shl_code=python,false]''' 导入需要库 ''' # -*- coding: utf-8 -*- from RPi import GPIO import time import os import requests import base64 import Adafruit_SSD1306 #import subprocess from PIL import Image from PIL import ImageDraw from PIL import ImageFont #屏幕显示开启提示 def shape(): RST = 24 # Note the following are only used with SPI: DC = 23 SPI_PORT = 0 SPI_DEVICE = 0 #128x64 display with hardware I2C: disp = Adafruit_SSD1306.SSD1306_128_64(rst=RST) disp.begin() disp.clear() disp.display() width = disp.width height = disp.height image = Image.new('1', (width, height)) draw = ImageDraw.Draw(image) draw.rectangle((0,0,width,height), outline=0, fill=0) font = ImageFont.load_default() font = ImageFont.truetype('simkai.ttf', 20) draw.text((20, 20), '系統已開啓', font=font, fill=255) disp.image(image) disp.display() #根据图片识别结果,文字输出屏幕反馈 def animal_pt(anim): if data_ocr1 !="非动物": text = '獲取成功' #animal_pt(data_ocr1,text1) else : text = '無法獲取' RST = None disp = Adafruit_SSD1306.SSD1306_128_64(rst=RST) disp.begin() disp.display() width = disp.width height = disp.height image = Image.new('1', (width, height)) draw = ImageDraw.Draw(image) font = ImageFont.load_default() font = ImageFont.truetype('simkai.ttf', 20) draw.text((10, 10), anim, font=font, fill=255) draw.text((40, 40), text, font=font, fill=255) disp.image(image) disp.display() #屏幕显示拍摄的动物图片 def shape_1(): RST = None disp = Adafruit_SSD1306.SSD1306_128_64(rst=RST) # Initialize library. disp.begin() # Clear display. disp.clear() disp.display() width = disp.width height = disp.height image = Image.new('1', (width, height)) # Get drawing object to draw on image. draw = ImageDraw.Draw(image) # Draw a black filled box to clear the image. draw.rectangle((0,0,width,height), outline=0, fill=0) image = Image.open('tiger.jpg').resize((disp.width, disp.height), Image.ANTIALIAS).convert('1') disp.image(image) disp.display() [/mw_shl_code] 2.animal_ocr()函数对设备拍摄的照片,进行AI识别,模型库为百度已训练好 [mw_shl_code=python,false]''' 动物识别 ,可参考百度AI平台动物识别连接 https://ai.baidu.com/tech/imagerecognition/animal ''' def animal_ocr(): request_url = "https://aip.baidubce.com/rest/2.0/image-classify/v1/animal" # 二进制方式打开图片文件 m = open('tiger.jpg', 'rb') img = base64.b64encode(m.read()) params = {"image":img} access_token = '24.2ae5773a75806bb5e69d0cd15ae02b3e.2592000.1597564614.282335-21433533' #调用鉴权接口获取的token,参考动物识别获取token.py request_url = request_url + "?access_token=" + access_token headers = {'content-type': 'application/x-www-form-urlencoded'} response = requests.post(request_url, data=params, headers=headers) if response: #print (response.json()) data = response.json() #print(data) data = data['result'] data_ocr= data[0]['name'] print('相似度:', data[0]['score']) print('动物名称:', data[0]['name']) return data_ocr[/mw_shl_code] 3.定义按钮端口和判断程序 [mw_shl_code=python,false]# 采用BCM引脚编号 GPIO.setmode(GPIO.BCM) # 关闭警告 GPIO.setwarnings(False) # 设置GPIO输入模式, 使用GPIO内置的下拉电阻, 即开关断开情况下输入为LOW GPIO.setup(22, GPIO.IN) shape() try: while True: if (GPIO.input(22)==GPIO.LOW): print('拍照開始!') os.system("raspistill -n -t 200 -w 1024 -h 768 -o tiger.jpg") time.sleep(2) shape_1() data_ocr1=animal_ocr() animal_pt(data_ocr1) time.sleep(3) else : print('請按快門拍照!') shape() time.sleep(0.5) except Exception : print('erorr') GPIO.cleanup()[/mw_shl_code] 六、组装外壳,整体测试 七、设备测试视频 八、项目扩展: 1.增加语音输出 2.攒钱买个大屏幕 3.配置移动电源,方便携带 4.扩展为其他物品识别模式 九、字体库 可以下载附件也可以 直接在控制面板-字体中复制 |
6.07 MB, 下载次数: 4080
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed