回到顶部 回到顶部

【挑战二】诗歌“POS”机 简单

头像 kylinpoet 2022.11.29 78 5

一、前言

 

2019年7月15日-29日,上海陆家嘴地铁站,出现15个会吐诗歌的POS机。诗歌里描绘着孩子们生活和希望的世界,那份特有的天真让来往匆匆的路人也都不由自主的停下了步伐。

1565151784164655.jpg

POS机里的诗歌上还清楚的标注了出处,它们是来自一位位留守儿童在老师的指导下完成的诗歌。
 这些小诗里有孩子对于情感一瞬的记录,一件小事,一个细节。

 

《小狗》
龙祥小学  于辰

“汪 汪 汪”

夏天出生的小狗不知道

一年回家一次的那个人

就是我爸爸

1565151876564985.jpg

孩子们的字里行间里,没有成年人惯用的宏大议题,山川湖海,各种寓意,各种意义,没有艺术的卖弄,只是三言两语,直击人心。

简单的文字,质朴的情感,反而让诗越动人。

 

这次,我们也来做一个“诗歌银行”的项目吧。

 

二、作品介绍

 

本作品的构思来源于留守儿童的关怀项目,通过诗歌的形式让更多的人了解留守儿童们生活 和无奈以及他们美好的心理愿景,让更多的人关注山区的贫困儿童!

 

三、作品构成

 

本作品,主要由三部分构成:

 

1. 主要的执行件为 热敏打印机,此热敏打印机有互联网功能,并提供API方便用户操作。

O1CN011HGjOi1IFkuPZfOlR_!!2206551750864.jpg

 

2.  二哈识图(HuskyLens)AI 视觉传感器,用于人脸识别。并 使用Mind+ 进行数据处理,通过MQTT协议,将需要的数据发送到互联网平台。

 

123.jpg

3. 本地Python客户端,连接MQTT服务器,将接收到的数据打印出来。

2022-11-29_120951.jpg

 

四、制作过程

1. 使用 HuskyLens 训练人脸识别,这步实际上是比较简单的,就不具体介绍了。

将HuskyLens屏幕中央的“+”字对准需要学习的人脸,短按“学习按键”完成学习。如果识别到相同的脸,则屏幕上会出现一个蓝色的框并显示”人脸:ID1“。这说明已经可以进行人脸识别了。

然而,上述操作只是让HuskyLens学习了人脸的一个角度(维度),但实际上人脸是立体的,因此人脸有多个角度。如果人脸角度变化了,比如正脸换成了侧脸,那HuskyLens不一定能识别出来。为解决这个问题,HuskyLens内置有持续学习的功能,能录入人脸的各个角度,让HuskyLens越学越准确。

录入各个角度人脸的操作方法如下:(注:开始学习新的人脸之前,先要让HuskyLens忘记已经学习过的人脸。操作方法参考“忘记学过的人脸”章节。)

将HuskyLens屏幕中央的“+”字对准需要学习的人脸,长按“学习按键”不松开,此时屏幕中会在人脸上显示黄色框并标识“人脸:ID1”,说明HuskyLens正在学习人脸。然后,将HuskyLens屏幕中央的黄色框依次对准同一个人的脸的不同角度,如正脸、侧脸(也可以是同一个人的多张照片),录入此人脸的各个角度。学习过程中,RGB灯为黄色。

接着,松开“学习按键”,结束学习。如果HuskyLens识别到学习过的人脸,则屏幕上,这个人脸会被蓝色的框选中,并显示”人脸:ID1“。

小提示: 如果屏幕中央没有“+”字,说明HuskyLens在该功能下已经学习过了(已学习状态)。如要让HuskyLens学习新的人脸,则需要先让HuskyLens忘记已学的人脸。

 

2. 在Mind+中编辑使用代码:

 

image.png

有几点需要说明:

a. MQTT服务器的连接,这里可使用 dfrobot提供的 easy iot 平台:

image.png

b. 诗歌使用了说明里的两首:

《小狗》
【龙祥小学  于辰】
“汪 汪 汪”
夏天出生的小狗不知道
一年回家一次的那个人
就是我爸爸

 

《长大》
【龙祥小学 子豪】 
长大是一件很难的事
上一次和爸爸妈妈
告别的时候
我学会了忍住不哭
我就知道
自己长大了

 

 

c. 使用【打印诗歌】:作为关键字,用于识别,并使用随机函数,随机打印不同的诗歌。

image.png

3. 编写本地发送 python 处理程序:

代码
import paho.mqtt.client as mqtt
import requests
import time
# from time import strftime, localtime# 打印当前时间
import base64


HOST = "iot.dfrobot.com.cn" #服务器ip地址
PORT = 1883   #服务器端口
USER = '********'     #登陆用户名
PASSWORD = '********'    #用户名对应的密码
TOPIC1 = '********'

api_url = 'http://open.memobird.cn/home/printpaper?ak=********'
api_id = 'memobirdID=********&userID=********'

def on_connect(client, userdata, flags, rc):
    rc_status = [ "连接成功", "协议版本错误", "无效的客户端标识", "服务器无法使用", "用户密码错误", "无授权" ]
    print("connect:" , rc_status[rc])
 
client = mqtt.Client()
client.on_connect = on_connect          #注册返回连接状态的回调函数
client.username_pw_set(USER, PASSWORD)   #如果服务器要求需要账户密码
# client.will_set("test/test", "test", 0)  #设置遗嘱消息
client.connect(HOST, PORT, keepalive=600) # 连接服务器
#client.disconnect() #断开连接,不会触发遗嘱消息

def on_message(client, userdata, msg):
    print("主题:", msg.topic)
    msgvalue = str(msg.payload,'utf-8') 
    print("消息:", msgvalue,'\n' )
    if '【打印诗歌】:' in msgvalue:
        msgvalue = msgvalue.replace('【打印诗歌】:', '')
        api_content =  base64.b64encode(msgvalue.encode('gbk')).decode('utf-8')
        base64.encodestring
        api_msg =  f"""{api_url}&{time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())}&printcontent=T:{api_content}&{api_id}"""
        print(api_msg)
        requests.post(api_msg)

client.on_message = on_message      #定义回调函数
client.subscribe(TOPIC1, qos=0)   #订阅主题test/#
client.loop_start()                 #非阻塞,启动接收线程
#client.loop_forever()              #阻塞式,会卡死在这等待接收
 
while 1:
    pass

打印测试:

image.png

评论

user-avatar
  • 花生编程

    花生编程2023.01.17

    不错

    0
    • 花生编程

      花生编程2023.01.17

      厉害

      0
      • 三春牛-创客

        三春牛-创客2022.12.28

        6,厉害

        0
        • 三春牛-创客

          三春牛-创客2022.12.28

          很好玩

          0
          • 摸鱼的网民

            摸鱼的网民2022.12.16

            6啊

            0