DF小黑盒变身---神奇宝贝图鉴

2020-07-251.1万
精华项目
AI 快速预览详细 收起
这个项目是一个基于DF小黑盒和树莓派的DIY神奇宝贝图鉴。通过连接OLED屏幕、碰撞传感器和树莓派摄像头,用户可以拍照并识别现实世界中的动物。项目使用Python代码和百度AI平台的动物识别功能,将识别结果显示在OLED屏幕上。适合8岁以上的儿童参与,既能激发孩子的好奇心,又能培养他们的编程能力和动手能力。

一、项目介绍:
     作为一个资深神奇宝贝迷老爸,每部关于精灵宝可梦的电影和动画片必看;《大侦探皮卡丘》讲述了蒂姆·古德曼为寻找下落不明的父亲来到莱姆市,意外与父亲的前宝可梦搭档大侦探皮卡丘相遇,并惊讶地发现自己是唯一能听懂皮卡丘说话的人类,他们决定组队踏上揭开真相的刺激冒险之路得故事。每次欣赏完大片,各种玩具和图鉴等衍生产品成了必买选择;老爸荷包严重缩水,授人以鱼不如授人以渔,趁假期和孩子一起造《神奇宝贝图鉴》,捕获属于自己的神奇宝贝。
    小伙伴们,快来辨别和收服现实世界中的动物们吧。

DF小黑盒变身---神奇宝贝图鉴图1

二、项目功能及运行流程
DF小黑盒变身---神奇宝贝图鉴图2

三、硬件清单
1.DF小黑盒  *1
4.碰撞传感器(左右皆可)*1 https://www.dfrobot.com.cn/goods-638.html



DF小黑盒变身---神奇宝贝图鉴图3


四、硬件连接
1.连接OLED屏幕
DF小黑盒变身---神奇宝贝图鉴图4

2.连接碰撞开关
DF小黑盒变身---神奇宝贝图鉴图5

3.连接树莓派摄像头
DF小黑盒变身---神奇宝贝图鉴图6

五、调试代码
代码运行思路如下
设置系统自动运行程序,按按钮拍照屏幕显示照片;识别照片,屏幕反馈结果。
DF小黑盒变身---神奇宝贝图鉴图7
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]

六、组装外壳,整体测试

DF小黑盒变身---神奇宝贝图鉴图8

DF小黑盒变身---神奇宝贝图鉴图9

DF小黑盒变身---神奇宝贝图鉴图10

DF小黑盒变身---神奇宝贝图鉴图11

DF小黑盒变身---神奇宝贝图鉴图12

DF小黑盒变身---神奇宝贝图鉴图13

七、设备测试视频

八、项目扩展:
1.增加语音输出
2.攒钱买个大屏幕
3.配置移动电源,方便携带
4.扩展为其他物品识别模式

九、字体库
可以下载附件也可以 直接在控制面板-字体中复制

DF小黑盒变身---神奇宝贝图鉴图14


simkai.rar

6.07 MB, 下载次数: 8417

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(9)
牛小宝
牛小宝
666牛逼666!!!
诩
厉害呀666
少东
少东
就地取材666
gray6666
gray6666
作者
群众组织一场DF小纸壳创意赛吧
pATAq
pATAq回复gray6666
我也有好多df盒子,拿来废物利用
DFS1w2cb8o8
DFS1w2cb8o8
厉害厉害
20060606
20060606
df的包装盒质量很好,还可以做项目外壳
pATAq
pATAq
来了来了
gray6666
gray6666
作者
回复pATAq
欢迎欢迎
hnyzcj
hnyzcj
是一个图像识别吗
gray6666
gray6666
作者
回复hnyzcj
动物图片识别,可以扩展成其物品
rzyzzxw
rzyzzxw
棒棒的
- 没有更多了 -