33281浏览
查看: 33281|回复: 4

[M10项目] 植入星火认知大模型的行空板机器人评价镜中的自己

[复制链接]
本帖最后由 云天 于 2024-1-10 11:09 编辑

【项目背景】
2023年10月24日,2023科大讯飞全球1024开发者节在合肥开幕,如期升级发布讯飞星火认知大模型V3.0。科大讯飞讯飞星火认知大模型基于深度学习技术,通过大量的数据训练,具备了强大的自然语言处理能力。这个模型不仅能够理解人类语言,还能够执行各种任务,如问答、机器翻译、文本生成等,亮点在于引入了语音输入识别及语言播报。
【项目设计】
本项目给行空板插上上带麦克风的USB摄像头,为行空板配上“耳机”和“眼睛”。使用行空板自带的“蓝牙模块”连接上蓝牙音箱,行空板的嘴巴。行空板上的屏幕显示摄像头拍摄的内容。行空板通过Mind+的Python模式编写程序调用“星火认知大模型”API,配上智慧的大脑。(API功能:用户输入一张图片和问题,从而识别出图片中的对象、场景等信息回答用户的问题)
【项目实现】
1、通过调用Opencv库采集环境图像,通过讯飞语音识别功能识别用户提问,发送给“星火认知大模型”进行“图像理解”,并可结合图像内容进行多轮细节提问。也可让“大模型”结合图像内容编写故事等。再通过“讯飞语音合成”,行空板通过蓝牙音箱播放反馈结果。
2.本项目重点,让行空板机器人(本人给它做了一个很丑的外形),对着镜子给自己照相,然后我们让它评价一下自己。
【机器人外形】
用圆纸板做为机器人的“脸”,中间是行空板、上面是USB摄像头(这两个增加了图像理解难度),为了更像是“脸”,用两个圆形红纸片装饰成两个腮红,再加上一个红红的大嘴吧。丑还是丑!!!
下面是一个蓝牙音箱,右侧是给音箱供电的电源。
植入星火认知大模型的行空板机器人评价镜中的自己图1

【测试一下】

把丑丑的它自己的照片传给星火大语言模型进行图片理解,因我做的机器人有点抽象,有时它不太理解我问的问题,比如它找不到“自己的腿”。
  1. 问:这张照片里有一个抽象的机器人和一个带灯的蓝牙音箱。请描述一下这个机器人。
  2. 答:这个机器人看起来像一个卡通人物,它有一个圆润的身体和一个大眼睛。它的身体是白色的,眼睛是蓝色的。
  3. 问:机器人的嘴是什么颜色?
  4. 答:根据照片描述,机器人的嘴是红色的。
  5. 问:机器人的一只腿上有一个东西,请描述一下它是什么?(我想问的是那个按钮)
  6. 答:根据照片描述,机器人的一只腿上有一个东西,它是一个带灯的蓝牙音箱。
  7. 问:蓝牙音箱上面是机器人的两条腿,记住这一点,然后重新描述一下,机器人腿上的东西。
  8. 答:根据照片描述,蓝牙音箱的上面是机器人的两条腿,所以这个东西就是蓝牙音箱。(我的机器人太抽象了,它也迷糊了)
  9. 问:那你描述一下这个蓝牙音箱
  10. 答:根据照片描述,蓝牙音箱的上面是机器人的两条腿,所以这个东西就是蓝牙音箱。
  11. 问:这个蓝牙音箱长什么样子
  12. 答:根据照片描述,这个蓝牙音箱的外形是一个长方形,上面有一个圆形的灯。
  13. 问:蓝牙音箱的外形是圆形的,请住这一点。那么请重新描述一下这个音箱。
  14. 答:根据照片描述,这个蓝牙音箱的外形是一个圆形的,所以这个东西就是蓝牙音箱。
  15. 问:这个蓝牙音箱长什么样子?
  16. 答:根据照片描述,这个蓝牙音箱的外形是一个圆形的,上面有一个圆形的灯。
  17. 问:机器人能说话吗?
  18. 答:根据照片描述,这个机器人的嘴是红色的。所以它可能能说话,但需要更多的信息才能确定。
  19. 问:说一说这个机器人的美丑?并说明理由。
  20. 答:根据照片描述,这个机器人的外形是一个圆润的身体和一个大眼睛。它的身体是白色的,眼睛是蓝色的。从视觉上来看,它看起来很可爱,所以可以说是美的。但是美丑是主观的评价,不同的人可能会有不同的看法。
  21. 问:你能重新给这个机器人设计一个形象
  22. 答:将机器人的头部设计成一个球形,身体设计成圆柱形,这样可以让整个机器人看起来更加立体和生动。同时,可以在机器人的身上添加一些细节,比如在身体上添加一些花纹或者图案,让机器人看起来更加有趣和吸引人。
  23. 问:你给一个刚刚说的机器人设计图,并以网址链接的形式给我,我能通过这个网址下载你的设计图。
  24. 答:抱歉,作为一个认知智能模型的我无法提供图片和网址链接。
复制代码
所用的代码:
  1. import _thread as thread
  2. import base64
  3. import datetime
  4. import hashlib
  5. import hmac
  6. import json
  7. from urllib.parse import urlparse
  8. import ssl
  9. from datetime import datetime
  10. from time import mktime
  11. from urllib.parse import urlencode
  12. from wsgiref.handlers import format_date_time
  13. import websocket  # 使用websocket_client
  14. appid = "*********************"    #填写控制台中获取的 APPID 信息
  15. api_secret = "*****************"   #填写控制台中获取的 APISecret 信息
  16. api_key ="*********************"    #填写控制台中获取的 APIKey 信息
  17. imagedata = open("pic.jpg",'rb').read()
  18. imageunderstanding_url = "wss://spark-api.cn-huabei-1.xf-yun.com/v2.1/image"#云端环境的服务地址
  19. text =[{"role": "user", "content": str(base64.b64encode(imagedata), 'utf-8'), "content_type":"image"}]
  20. class Ws_Param(object):
  21.     # 初始化
  22.     def __init__(self, APPID, APIKey, APISecret, imageunderstanding_url):
  23.         self.APPID = APPID
  24.         self.APIKey = APIKey
  25.         self.APISecret = APISecret
  26.         self.host = urlparse(imageunderstanding_url).netloc
  27.         self.path = urlparse(imageunderstanding_url).path
  28.         self.ImageUnderstanding_url = imageunderstanding_url
  29.     # 生成url
  30.     def create_url(self):
  31.         # 生成RFC1123格式的时间戳
  32.         now = datetime.now()
  33.         date = format_date_time(mktime(now.timetuple()))
  34.         # 拼接字符串
  35.         signature_origin = "host: " + self.host + "\n"
  36.         signature_origin += "date: " + date + "\n"
  37.         signature_origin += "GET " + self.path + " HTTP/1.1"
  38.         # 进行hmac-sha256进行加密
  39.         signature_sha = hmac.new(self.APISecret.encode('utf-8'), signature_origin.encode('utf-8'),
  40.                                  digestmod=hashlib.sha256).digest()
  41.         signature_sha_base64 = base64.b64encode(signature_sha).decode(encoding='utf-8')
  42.         authorization_origin = f'api_key="{self.APIKey}", algorithm="hmac-sha256", headers="host date request-line", signature="{signature_sha_base64}"'
  43.         authorization = base64.b64encode(authorization_origin.encode('utf-8')).decode(encoding='utf-8')
  44.         # 将请求的鉴权参数组合为字典
  45.         v = {
  46.             "authorization": authorization,
  47.             "date": date,
  48.             "host": self.host
  49.         }
  50.         # 拼接鉴权参数,生成url
  51.         url = self.ImageUnderstanding_url + '?' + urlencode(v)
  52.         #print(url)
  53.         # 此处打印出建立连接时候的url,参考本demo的时候可取消上方打印的注释,比对相同参数时生成的url与自己代码生成的url是否一致
  54.         return url
  55. # 收到websocket错误的处理
  56. def on_error(ws, error):
  57.     print("### error:", error)
  58. # 收到websocket关闭的处理
  59. def on_close(ws,one,two):
  60.     print(" ")
  61. # 收到websocket连接建立的处理
  62. def on_open(ws):
  63.     thread.start_new_thread(run, (ws,))
  64. def run(ws, *args):
  65.     data = json.dumps(gen_params(appid=ws.appid, question= ws.question ))
  66.     ws.send(data)
  67. # 收到websocket消息的处理
  68. def on_message(ws, message):
  69.     #print(message)
  70.     data = json.loads(message)
  71.     code = data['header']['code']
  72.     if code != 0:
  73.         print(f'请求错误: {code}, {data}')
  74.         ws.close()
  75.     else:
  76.         choices = data["payload"]["choices"]
  77.         status = choices["status"]
  78.         content = choices["text"][0]["content"]
  79.         print(content,end ="")
  80.         global answer
  81.         answer += content
  82.         # print(1)
  83.         if status == 2:
  84.             ws.close()
  85. def gen_params(appid, question):
  86.     """
  87.     通过appid和用户的提问来生成请参数
  88.     """
  89.     data = {
  90.         "header": {
  91.             "app_id": appid
  92.         },
  93.         "parameter": {
  94.             "chat": {
  95.                 "domain": "image",
  96.                 "temperature": 0.5,
  97.                 "top_k": 4,
  98.                 "max_tokens": 2028,
  99.                 "auditing": "default"
  100.             }
  101.         },
  102.         "payload": {
  103.             "message": {
  104.                 "text": question
  105.             }
  106.         }
  107. }
  108.     return data
  109. def main(appid, api_key, api_secret, imageunderstanding_url,imagedata,question):
  110.     wsParam = Ws_Param(appid, api_key, api_secret, imageunderstanding_url)
  111.     websocket.enableTrace(False)
  112.     wsUrl = wsParam.create_url()
  113.     ws = websocket.WebSocketApp(wsUrl, on_message=on_message, on_error=on_error, on_close=on_close, on_open=on_open)
  114.     ws.appid = appid
  115.     ws.imagedata = imagedata
  116.     ws.question = question
  117.     ws.run_forever(sslopt={"cert_reqs": ssl.CERT_NONE})
  118. def getText(role, content):
  119.     jsoncon = {}
  120.     jsoncon["role"] = role
  121.     jsoncon["content"] = content
  122.     text.append(jsoncon)
  123.     return text
  124. def getlength(text):
  125.     length = 0
  126.     for content in text:
  127.         temp = content["content"]
  128.         leng = len(temp)
  129.         length += leng
  130.     return length
  131. def checklen(text):
  132.     #print("text-content-tokens:", getlength(text[1:]))
  133.     while (getlength(text[1:])> 8000):
  134.         del text[1]
  135.     return text
  136. if __name__ == '__main__':
  137.     text.clear
  138.     print(text)
  139.     while(1):
  140.         Input = input("\n" +"问:")
  141.         question = checklen(getText("user",Input))
  142.         print(question)
  143.         answer = ""
  144.         print("答:",end = "")
  145.         main(appid, api_key, api_secret, imageunderstanding_url, imagedata,question)
  146.         getText("assistant", answer)
  147.         # print(str(text))
复制代码
【行空板摄像头】
    行空板使用USB摄像头,通过Opencv库打开摄像头获取图像并在屏幕上显示。
  1. #导入所需的模块:
  2. import cv2
  3. from unihiker import GUI
  4. #创建视频对象并打开摄像头:
  5. cap = cv2.VideoCapture(0) # 参数为0表示默认摄像头设备
  6. u_gui=GUI()
  7. #读取每一帧图像并显示:
  8. bs=0
  9. while True:
  10.      ret, img = cap.read() # 从摄像头读取当前帧图像
  11.      if not ret:
  12.         break # 若无法成功读取图像,则退出循环
  13.      img=cv2.resize(img,(240,320))
  14.      cv2.imwrite("img.png", img)
  15.      if bs==0:
  16.        AI图=u_gui.draw_image(image="img.png",x=0,y=0)
  17.        bs=1
  18.      else:
  19.        AI图.config(image="img.png")
  20. #关闭视频对象:
  21. cap.release()
复制代码
【使用A键拍照进行图像理解】

使用行空板自带的A键,程序中用“button_a.is_pressed()”判断是否按下。主要用于测试时使用,当整个机器人安装好后,每次去“脸”的后面去按有些不方便。
  1. import _thread as thread
  2. import base64
  3. import datetime
  4. import hashlib
  5. import hmac
  6. import json
  7. from urllib.parse import urlparse
  8. import ssl
  9. from datetime import datetime
  10. from time import mktime
  11. from urllib.parse import urlencode
  12. from wsgiref.handlers import format_date_time
  13. import websocket  # 使用websocket_client
  14. import cv2
  15. import base64
  16. from unihiker import GUI
  17. from pinpong.extension.unihiker import *
  18. from pinpong.board import Board,Pin
  19. import time
  20. Board().begin()
  21. #创建视频对象并打开摄像头:
  22. cap = cv2.VideoCapture(0) # 参数为0表示默认摄像头设备
  23. #读取每一帧图像并显示:
  24. bs=0
  25. appid = "************"    #填写控制台中获取的 APPID 信息
  26. api_secret = "******************"   #填写控制台中获取的 APISecret 信息
  27. api_key ="***********************"    #填写控制台中获取的 APIKey 信息
  28. imageunderstanding_url = "wss://spark-api.cn-huabei-1.xf-yun.com/v2.1/image"#云端环境的服务地址
  29. text =[{"role": "user", "content": "", "content_type":"image"}]
  30. class Ws_Param(object):
  31.     # 初始化
  32.     def __init__(self, APPID, APIKey, APISecret, imageunderstanding_url):
  33.         self.APPID = APPID
  34.         self.APIKey = APIKey
  35.         self.APISecret = APISecret
  36.         self.host = urlparse(imageunderstanding_url).netloc
  37.         self.path = urlparse(imageunderstanding_url).path
  38.         self.ImageUnderstanding_url = imageunderstanding_url
  39.     # 生成url
  40.     def create_url(self):
  41.         # 生成RFC1123格式的时间戳
  42.         now = datetime.now()
  43.         date = format_date_time(mktime(now.timetuple()))
  44.         # 拼接字符串
  45.         signature_origin = "host: " + self.host + "\n"
  46.         signature_origin += "date: " + date + "\n"
  47.         signature_origin += "GET " + self.path + " HTTP/1.1"
  48.         # 进行hmac-sha256进行加密
  49.         signature_sha = hmac.new(self.APISecret.encode('utf-8'), signature_origin.encode('utf-8'),
  50.                                  digestmod=hashlib.sha256).digest()
  51.         signature_sha_base64 = base64.b64encode(signature_sha).decode(encoding='utf-8')
  52.         authorization_origin = f'api_key="{self.APIKey}", algorithm="hmac-sha256", headers="host date request-line", signature="{signature_sha_base64}"'
  53.         authorization = base64.b64encode(authorization_origin.encode('utf-8')).decode(encoding='utf-8')
  54.         # 将请求的鉴权参数组合为字典
  55.         v = {
  56.             "authorization": authorization,
  57.             "date": date,
  58.             "host": self.host
  59.         }
  60.         # 拼接鉴权参数,生成url
  61.         url = self.ImageUnderstanding_url + '?' + urlencode(v)
  62.         #print(url)
  63.         # 此处打印出建立连接时候的url,参考本demo的时候可取消上方打印的注释,比对相同参数时生成的url与自己代码生成的url是否一致
  64.         return url
  65. # 收到websocket错误的处理
  66. def on_error(ws, error):
  67.     print("### error:", error)
  68. # 收到websocket关闭的处理
  69. def on_close(ws,one,two):
  70.     print(" ")
  71. # 收到websocket连接建立的处理
  72. def on_open(ws):
  73.     thread.start_new_thread(run, (ws,))
  74. def run(ws, *args):
  75.     data = json.dumps(gen_params(appid=ws.appid, question= ws.question ))
  76.     ws.send(data)
  77. # 收到websocket消息的处理
  78. def on_message(ws, message):
  79.    
  80.     data = json.loads(message)
  81.     code = data['header']['code']
  82.     if code != 0:
  83.         print(f'请求错误: {code}, {data}')
  84.         ws.close()
  85.     else:
  86.         choices = data["payload"]["choices"]
  87.         status = choices["status"]
  88.         content = choices["text"][0]["content"]
  89.         
  90.         print(content,end ="")
  91.         global answer
  92.         answer += content
  93.         # print(1)
  94.         if status == 2:
  95.             ws.close()
  96. def gen_params(appid, question):
  97.     """
  98.     通过appid和用户的提问来生成请参数
  99.     """
  100.     data = {
  101.         "header": {
  102.             "app_id": appid
  103.         },
  104.         "parameter": {
  105.             "chat": {
  106.                 "domain": "image",
  107.                 "temperature": 0.5,
  108.                 "top_k": 4,
  109.                 "max_tokens": 2028,
  110.                 "auditing": "default"
  111.             }
  112.         },
  113.         "payload": {
  114.             "message": {
  115.                 "text": question
  116.             }
  117.         }
  118. }
  119.     return data
  120. def main(appid, api_key, api_secret, imageunderstanding_url,imagedata,question):
  121.     wsParam = Ws_Param(appid, api_key, api_secret, imageunderstanding_url)
  122.     websocket.enableTrace(False)
  123.     wsUrl = wsParam.create_url()
  124.     ws = websocket.WebSocketApp(wsUrl, on_message=on_message, on_error=on_error, on_close=on_close, on_open=on_open)
  125.     ws.appid = appid
  126.     ws.imagedata = imagedata
  127.     ws.question = question
  128.     ws.run_forever(sslopt={"cert_reqs": ssl.CERT_NONE})
  129. def getText(role, content):
  130.     jsoncon = {}
  131.     jsoncon["role"] = role
  132.     jsoncon["content"] = content
  133.     text.append(jsoncon)
  134.     return text
  135. def getlength(text):
  136.     length = 0
  137.     for content in text:
  138.         temp = content["content"]
  139.         leng = len(temp)
  140.         length += leng
  141.     return length
  142. def checklen(text):
  143.     #print("text-content-tokens:", getlength(text[1:]))
  144.     while (getlength(text[1:])> 8000):
  145.         del text[1]
  146.     return text
  147. u_gui=GUI()
  148. if __name__ == '__main__':
  149.    
  150.     bs=0
  151.     while(1):
  152.      ret, img = cap.read() # 从摄像头读取当前帧图像
  153.      if not ret:
  154.         break # 若无法成功读取图像,则退出循环
  155.      img=cv2.resize(img,(240,320))
  156.      cv2.imwrite("img.jpg", img)
  157.      
  158.      if bs==0:
  159.        AI图=u_gui.draw_image(image="img.jpg",x=0,y=0)
  160.        bs=1
  161.      else:
  162.        AI图.config(image="img.jpg")
  163.      if (button_a.is_pressed()==True):
  164.         imagedata = open("img.jpg",'rb').read()
  165.         text =[{"role": "user", "content": str(base64.b64encode(imagedata), 'utf-8'), "content_type":"image"}]
  166.         text.clear
  167.      
  168.         Input="start"
  169.         while True:
  170.          Input = input("\n" +"问:")
  171.          if Input=="不再提问":
  172.              break
  173.          question = checklen(getText("user",Input))
  174.   
  175.          answer = ""
  176.          print("答:",end = "")
  177.          main(appid, api_key, api_secret, imageunderstanding_url, imagedata,question)
  178.          getText("assistant", answer)
  179. #关闭视频对象:
  180. cv2.destroyAllWindows()        
复制代码

【语音交互】
语音监听及录音使用自定义模块文件“listening.py”(这前项目有源代码,此不在展示),使用一个外置按钮接在22引脚上,方便操作。语音交互使用讯飞语音识别及语音合成。完整代码如下:
  1. import _thread as thread
  2. import base64
  3. import datetime
  4. import hashlib
  5. import hmac
  6. import json
  7. from urllib.parse import urlparse
  8. import ssl
  9. from datetime import datetime
  10. from time import mktime
  11. from urllib.parse import urlencode
  12. from wsgiref.handlers import format_date_time
  13. import websocket  # 使用websocket_client
  14. import cv2
  15. import base64
  16. from unihiker import GUI
  17. from pinpong.extension.unihiker import *
  18. from pinpong.board import Board,Pin
  19. import time
  20. import listening
  21. from df_xfyun_speech import XfIat
  22. from df_xfyun_speech import XfTts
  23. from unihiker import Audio
  24. u_audio = Audio()
  25. appid = "***************"    #填写控制台中获取的 APPID 信息
  26. api_secret = "**************"   #填写控制台中获取的 APISecret 信息
  27. api_key ="******************"    #填写控制台中获取的 APIKey 信息
  28. import xunfeiasr
  29. xunfeiasr.xunfeiasr_set(APPID=appid,APISecret=api_secret,APIKey=api_key)
  30. options = {}
  31. tts = XfTts(appid, api_key, api_secret, options)
  32. iat = XfIat(appid, api_key, api_secret)
  33. Board().begin()
  34. p_p22_in=Pin(Pin.P22, Pin.IN)
  35. #创建视频对象并打开摄像头:
  36. cap = cv2.VideoCapture(0) # 参数为0表示默认摄像头设备
  37. #读取每一帧图像并显示:
  38. bs=0
  39. imageunderstanding_url = "wss://spark-api.cn-huabei-1.xf-yun.com/v2.1/image"#云端环境的服务地址
  40. text =[{"role": "user", "content": "", "content_type":"image"}]
  41. class Ws_Param(object):
  42.     # 初始化
  43.     def __init__(self, APPID, APIKey, APISecret, imageunderstanding_url):
  44.         self.APPID = APPID
  45.         self.APIKey = APIKey
  46.         self.APISecret = APISecret
  47.         self.host = urlparse(imageunderstanding_url).netloc
  48.         self.path = urlparse(imageunderstanding_url).path
  49.         self.ImageUnderstanding_url = imageunderstanding_url
  50.     # 生成url
  51.     def create_url(self):
  52.         # 生成RFC1123格式的时间戳
  53.         now = datetime.now()
  54.         date = format_date_time(mktime(now.timetuple()))
  55.         # 拼接字符串
  56.         signature_origin = "host: " + self.host + "\n"
  57.         signature_origin += "date: " + date + "\n"
  58.         signature_origin += "GET " + self.path + " HTTP/1.1"
  59.         # 进行hmac-sha256进行加密
  60.         signature_sha = hmac.new(self.APISecret.encode('utf-8'), signature_origin.encode('utf-8'),
  61.                                  digestmod=hashlib.sha256).digest()
  62.         signature_sha_base64 = base64.b64encode(signature_sha).decode(encoding='utf-8')
  63.         authorization_origin = f'api_key="{self.APIKey}", algorithm="hmac-sha256", headers="host date request-line", signature="{signature_sha_base64}"'
  64.         authorization = base64.b64encode(authorization_origin.encode('utf-8')).decode(encoding='utf-8')
  65.         # 将请求的鉴权参数组合为字典
  66.         v = {
  67.             "authorization": authorization,
  68.             "date": date,
  69.             "host": self.host
  70.         }
  71.         # 拼接鉴权参数,生成url
  72.         url = self.ImageUnderstanding_url + '?' + urlencode(v)
  73.         #print(url)
  74.         # 此处打印出建立连接时候的url,参考本demo的时候可取消上方打印的注释,比对相同参数时生成的url与自己代码生成的url是否一致
  75.         return url
  76. # 收到websocket错误的处理
  77. def on_error(ws, error):
  78.     print("### error:", error)
  79. # 收到websocket关闭的处理
  80. def on_close(ws,one,two):
  81.     print(" ")
  82. # 收到websocket连接建立的处理
  83. def on_open(ws):
  84.     thread.start_new_thread(run, (ws,))
  85. def run(ws, *args):
  86.     data = json.dumps(gen_params(appid=ws.appid, question= ws.question ))
  87.     ws.send(data)
  88. # 收到websocket消息的处理
  89. def on_message(ws, message):
  90.    
  91.     data = json.loads(message)
  92.     code = data['header']['code']
  93.     if code != 0:
  94.         print(f'请求错误: {code}, {data}')
  95.         ws.close()
  96.       
  97.     else:
  98.         choices = data["payload"]["choices"]
  99.         status = choices["status"]
  100.         content = choices["text"][0]["content"]
  101.         
  102.         print(content,end ="")
  103.         global answer
  104.         answer += content
  105.         # print(1)
  106.         if status == 2:
  107.             ws.close()
  108. def gen_params(appid, question):
  109.     """
  110.     通过appid和用户的提问来生成请参数
  111.     """
  112.     data = {
  113.         "header": {
  114.             "app_id": appid
  115.         },
  116.         "parameter": {
  117.             "chat": {
  118.                 "domain": "image",
  119.                 "temperature": 0.5,
  120.                 "top_k": 4,
  121.                 "max_tokens": 2028,
  122.                 "auditing": "default"
  123.             }
  124.         },
  125.         "payload": {
  126.             "message": {
  127.                 "text": question
  128.             }
  129.         }
  130. }
  131.     return data
  132. def main(appid, api_key, api_secret, imageunderstanding_url,imagedata,question):
  133.     wsParam = Ws_Param(appid, api_key, api_secret, imageunderstanding_url)
  134.     websocket.enableTrace(False)
  135.     wsUrl = wsParam.create_url()
  136.     ws = websocket.WebSocketApp(wsUrl, on_message=on_message, on_error=on_error, on_close=on_close, on_open=on_open)
  137.     ws.appid = appid
  138.     ws.imagedata = imagedata
  139.     ws.question = question
  140.     ws.run_forever(sslopt={"cert_reqs": ssl.CERT_NONE})
  141. def getText(role, content):
  142.     jsoncon = {}
  143.     jsoncon["role"] = role
  144.     jsoncon["content"] = content
  145.     text.append(jsoncon)
  146.     return text
  147. def getlength(text):
  148.     length = 0
  149.     for content in text:
  150.         temp = content["content"]
  151.         leng = len(temp)
  152.         length += leng
  153.     return length
  154. def checklen(text):
  155.     #print("text-content-tokens:", getlength(text[1:]))
  156.     while (getlength(text[1:])> 8000):
  157.         del text[1]
  158.     return text
  159. u_gui=GUI()
  160. if __name__ == '__main__':
  161.    
  162.     bs=0
  163.     while(1):
  164.      ret, img = cap.read() # 从摄像头读取当前帧图像
  165.      if not ret:
  166.         break # 若无法成功读取图像,则退出循环
  167.      img=cv2.resize(img,(240,320))
  168.      cv2.imwrite("img.jpg", img)
  169.      
  170.      if bs==0:
  171.        AI图=u_gui.draw_image(image="img.jpg",x=0,y=0)
  172.        bs=1
  173.      else:
  174.        AI图.config(image="img.jpg")
  175.      if (p_p22_in.read_digital()==True):
  176.      
  177.         imagedata = open("img.jpg",'rb').read()
  178.         text =[{"role": "user", "content": str(base64.b64encode(imagedata), 'utf-8'), "content_type":"image"}]
  179.         text.clear
  180.         tts.synthesis("拍照已完成,请提出你的问题。", "speech.wav")
  181.         u_audio.play("speech.wav")
  182.         time.sleep(2)
  183.         
  184.         while True:
  185.          
  186.          listening.listen()
  187.          ShiBieNaRong=xunfeiasr.xunfeiasr(r"record.wav")
  188.          if ShiBieNaRong=="不再提问":
  189.              break
  190.          if ShiBieNaRong!="":
  191.            question = checklen(getText("user",ShiBieNaRong))
  192.            answer = ""
  193.            print("答:",end = "")
  194.            main(appid, api_key, api_secret, imageunderstanding_url, imagedata,question)
  195.            
  196.            
  197.            if answer!="":
  198.              tts.synthesis(answer+"……", "speech.wav")
  199.              u_audio.play("speech.wav")
  200.             
  201.              getText("assistant", answer)
  202.              time.sleep(2)
  203. #关闭视频对象:
  204. cv2.destroyAllWindows()        
复制代码
【让“它“照镜子】让AI从镜子中找到自己的脸(实际上不太像是脸),并进行描述。开始AI并不认为镜中“圆圆的东西”是张脸,当告诉它后,它说:这是张白色的圆脸,眼睛很大,嘴巴微微张开,好像在笑,脸部表情非常可爱,给人一种友好和亲切的感觉。(真会夸)我要是告诉它这就是它自己,它会怎么说。我还真不敢问,不敢问呀!!!
植入星火认知大模型的行空板机器人评价镜中的自己图2


我的视角拍的
植入星火认知大模型的行空板机器人评价镜中的自己图3

这是它的视角看到的

【看”它“的主人及环境】
我让AI给我编了一个故事,但当我让AI评价一我的相貌时,它以无法看出我的年龄为由搪塞过去,是不想说,还是不敢说(怕我砸了它)。当我让看周围环境时,AI看的还是蛮认真的。




木子呢  管理员

发表于 2024-1-12 11:23:22

感觉真的有在努力想把造型做的好看些,哈哈哈哈哈
回复

使用道具 举报

zhangzb61759  初级技师

发表于 2024-1-24 16:10:09

本帖最后由 zhangzb61759 于 2024-1-24 16:11 编辑

请求错误: 11200, {'header': {'code': 11200, 'message': 'AppIdNoAuthError:(16:08:48.885) tokens.total', 'sid': 'cht000bcb4c@dx18d3a83bdf4b81b550', 'status': 2}}
宋老师,我已经成功申请了3.0模型,为什么会有这个错误呢
回复

使用道具 举报

云天  初级技神
 楼主|

发表于 2024-1-25 15:42:25

问:“宋老师,我已经成功申请了3.0模型,为什么会有这个错误呢”
答:这个用的是“图像理解”,功能。你再找找。
回复

使用道具 举报

古月6666  学徒

发表于 2024-10-7 10:40:05

宋老师,请问里面提到的listening.py在哪一个项目里呀
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail