2023-12-24 20:48:04 [显示全部楼层]
39992浏览
查看: 39992|回复: 0

[项目] 用树莓派AI人像变换给自己一次“跨越年龄的体验”

[复制链接]
本帖最后由 云天 于 2023-12-24 21:06 编辑

【项目背景】
        互联网时代,日新月异的技术更迭让大众的娱乐方式变得更加多元化。越来越多线上娱乐体验成为新潮流,出现了AI人像特效、VR游景点、可交互影视剧、元宇宙等。
        想要通过照片看到以前的自己或者未来几十年后的自己,放在之前肯定是没有办法实现,但是现在随着科技进步,AI技术已经融入到生活中的方方面面甚至是角角落落,不管在哪一个领域都能够看到它的存在,图片修复软件也会在AI技术之下变得更加完善。通过各种不同的特效,能够将我们照片更换出不一样的风格,也能够一键将人带到60年之后,看一看未来的自己究竟长得什么样。
【项目设计】
用树莓派AI人像变换给自己一次“跨越年龄的体验”图1

        今天,我就用树莓派结合腾讯云AI人脸变换,把你带到未来,也能够把你带到以前。这主要是通过AI技术改变照片上人物的容貌而去推算出未来的自己将会变得怎么样。许多人在试用我这个项目特效之前,最初的意思是想看一看变老之后会是否依然美丽帅气,但是在体验的过程当中画风逐渐跑偏,很多人在看到自己变老后的样子被逗笑了,也有很多人看到之后被感动的哭的,有的朋友表示看到自己变老的照片,想到了自己已故的亲人。
        通过智能识别照片中人的五官,然后一键能够改变照片中人物的年龄,甚至是6~85岁都能够看得到。下面请大家跟随我通过项目制作过程,踏上穿越的时光之旅,感受自己幼年到老年的变化。

【演示视频】
        先上视频,看一下自测试效果。

【硬件设备】
        树莓派,显示屏,usb摄像头,电源(手机充电器),乐高积木件。
用树莓派AI人像变换给自己一次“跨越年龄的体验”图2


【硬件搭建】

        1.组合树莓派和显示屏
用树莓派AI人像变换给自己一次“跨越年龄的体验”图4用树莓派AI人像变换给自己一次“跨越年龄的体验”图3


        2.乐高积木搭建框架
用树莓派AI人像变换给自己一次“跨越年龄的体验”图6用树莓派AI人像变换给自己一次“跨越年龄的体验”图5

        3.安装摄像头
用树莓派AI人像变换给自己一次“跨越年龄的体验”图8用树莓派AI人像变换给自己一次“跨越年龄的体验”图7

【供电开机】
        下载最新的Raspberry Pi OS,安装在SD卡上,插入树莓派,通电开机。

用树莓派AI人像变换给自己一次“跨越年龄的体验”图9

【安装Mind+】

        在树莓派上安装“Mind+客户端下载for Linux”,Mind+官方下载- Mind+图形化编程软件 (mindplus.cc)
用树莓派AI人像变换给自己一次“跨越年龄的体验”图10
        Mind+的V1.7.3版本支持arm64架构的CPU如树莓派,且安装了Linux相关系统,例如ubuntu、debian。
【安装库
        Mind+的V1.7.3版本Linux版,Python模式,已安装好opencv-python库(自已在树莓派中安装这个库,很麻烦)。通过库管理,手动安装“tencentcloud-sdk-python”。
用树莓派AI人像变换给自己一次“跨越年龄的体验”图11

用树莓派AI人像变换给自己一次“跨越年龄的体验”图18


【编写程序】

        1.利用opencv库获取摄像头图像
  1. #导入所需的模块:
  2. import cv2
  3. #创建视频对象并打开摄像头:
  4. cap = cv2.VideoCapture(0) # 参数为0表示默认摄像头设备
  5. #读取每一帧图像并显示:
  6. while True:
  7.     ret, frame = cap.read() # 从摄像头读取当前帧图像
  8.     if not ret:
  9.         break # 若无法成功读取图像,则退出循环
  10.     cv2.imshow('Camera', frame) # 显示当前帧图像
  11.     if cv2.waitKey(1) == ord('q'): # 等待用户按下'q'键退出程序
  12.         break
  13. #关闭视频对象和窗口:
  14. cap.release()
  15. cv2.destroyAllWindows()
复制代码
       2.使用Haar级联分类器来检测人脸
  1. import cv2
  2. import numpy as np
  3. # 创建面部分类器对象。使用Haar级联分类器来检测人脸。
  4. cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
  5. cap = cv2.VideoCapture(0)
  6. while True:
  7.     ret, image = cap.read()
  8.     # 转换为灰度图像
  9.    
  10.     gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
  11.     # 检测人脸。使用detectMultiScale()函数来找到图像中的人脸区域。这会返回包含每个人脸位置信息的列表:
  12.     faces = cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))
  13.     # 标记人脸。使用rectangle()函数在原始图像上绘制边界框来标记检测到的人脸
  14.     for (x, y, w, h) in faces:
  15.       cv2.rectangle(image, (x, y), (x+w, y+h), (0, 255, 0), 3)
  16.     # 显示结果。最后,使用imshow()函数显示带有标记人脸的图像
  17.     cv2.imshow("Face Detection", image)
  18.     cv2.waitKey(1)
  19. cv2.destroyAllWindows()
复制代码
用树莓派AI人像变换给自己一次“跨越年龄的体验”图12


        3.实现中文提醒,及设置基准框
  1. import cv2
  2. import numpy as np
  3. from PIL import Image, ImageDraw, ImageFont
  4. # 加载Haar级联分类器模型(预训练好的)
  5. face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
  6. # 从文件或者视频流中获取图像数据
  7. cap = cv2.VideoCapture(0)
  8. sum1=0
  9. sum2=0
  10. bs=0
  11. while True:
  12.     ret, img = cap.read()
  13.     height, width, _ = img.shape
  14.     print("图像的高度为:", height)
  15.     print("图像的宽度为:", width)
  16.     if ret:
  17.        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
  18.        # 对图像进行人脸检测
  19.        faces = face_cascade.detectMultiScale(gray, scaleFactor=1.3, minNeighbors=5, flags=cv2.CASCADE_SCALE_IMAGE)
  20.        # 标记并显示检测到的人脸区域
  21.        if len(faces)!=0:
  22.            sum2=0
  23.            if bs==0:
  24.              sum1=sum1+1
  25.              if sum1>100:
  26.                 bs=1
  27.        else:
  28.            sum1=0
  29.            if bs==1:
  30.              sum2=sum2+1
  31.              if sum2>100:
  32.                bs=0
  33.        x1=260
  34.        y1=170
  35.        w1=200
  36.        h1=200        
  37.        cv2.rectangle(img, (x1, y1), (x1+w1, y1+h1), (0, 255, 0), 3)
  38.        for (x, y, w, h) in faces:
  39.           cv2.rectangle(img, (x, y), (x+w, y+h), (0, 255, 0), 3)
  40.           # 展示结果图片
  41.        if abs(x-x1)<20 and abs(y-y1)<20 and abs(w-w1)<20 and abs(h-h1)<20:
  42.            print("ok")
  43.            cv2img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
  44.            pilimg = Image.fromarray(cv2img)
  45.            # PIL图片上打印汉字
  46.            draw = ImageDraw.Draw(pilimg) # 图片上打印
  47.            #simsun 宋体
  48.            font = ImageFont.truetype("SIMHEI.ttf", 40, encoding="utf-8")
  49.            #位置,文字,颜色==红色,字体引入
  50.            draw.text((40, 430), "人脸年龄渐变正在生成中……", (255, 0, 0), font=font)
  51.            # PIL图片转cv2 图片
  52.            img = cv2.cvtColor(np.array(pilimg), cv2.COLOR_RGB2BGR)
  53.        cv2.imshow("Result", img)
  54.        cv2.waitKey(1)
  55. cv2.destroyAllWindows()
复制代码
用树莓派AI人像变换给自己一次“跨越年龄的体验”图13

开通人像变换服务

        1.注册腾讯云, 获取API调用秘钥,在访问管理里可以获取到当前账号的SecretId和SecretKey,以便于后面调用云服务的前面验证。这个一定要保管好,泄露出去有被人盗刷的风险。已废弃或者有暴露风险的Secret也可以禁用,最大程度降低风险。

用树莓派AI人像变换给自己一次“跨越年龄的体验”图15

        2.正式使用人像变换服务好像要开通下现有服务,和腾讯云其他产品比较像。点击下开通即可。

用树莓派AI人像变换给自己一次“跨越年龄的体验”图14

        3.使用 API Explorer,可以在上面自动生成代码,同时也配备有签名调试工具。
用树莓派AI人像变换给自己一次“跨越年龄的体验”图16
        4.用本地图片测试
  1. import json
  2. import base64
  3. from tencentcloud.common import credential
  4. from tencentcloud.common.profile.client_profile import ClientProfile
  5. from tencentcloud.common.profile.http_profile import HttpProfile
  6. from tencentcloud.common.exception.tencent_cloud_sdk_exception import TencentCloudSDKException
  7. from tencentcloud.ft.v20200304 import ft_client, models
  8. # 读一个本地测试文件转换为base64编码
  9. f = open('./test2.jpg', 'rb')
  10. base64_data = base64.b64encode(f.read())
  11. SecretId="*********************"
  12. SecretKey="*********************"
  13. try:
  14.     # 实例化一个认证对象,入参需要传入腾讯云账户secretId,secretKey,此处还需注意密钥对的保密
  15.     # 密钥可前往https://console.cloud.tencent.com/cam/capi网站进行获取
  16.     cred = credential.Credential(SecretId, SecretKey)        # 传入自己的秘钥
  17.     # 实例化一个http选项,可选的,没有特殊需求可以跳过
  18.     httpProfile = HttpProfile()
  19.     httpProfile.endpoint = "ft.tencentcloudapi.com"
  20.     # 实例化一个client选项,可选的,没有特殊需求可以跳过
  21.     clientProfile = ClientProfile()
  22.     clientProfile.httpProfile = httpProfile
  23.     # 实例化要请求产品的client对象,clientProfile是可选的
  24.     client = ft_client.FtClient(cred, "ap-guangzhou", clientProfile)
  25.     # 实例化一个请求对象,每个接口都会对应一个request对象
  26.     req = models.ChangeAgePicRequest()
  27.     params = {
  28.         "Image": base64_data.decode("utf-8"),   # python里的bytes类型要转成string才可使用
  29.         "AgeInfos": [
  30.             {
  31.                 "Age":80        # 可以测试不同的年龄看效果
  32.             }
  33.         ],
  34.         "RspImgType": "url"
  35.     }
  36.     req.from_json_string(json.dumps(params))
  37.     # 返回的resp是一个ChangeAgePicResponse的实例,与请求对象对应
  38.     resp = client.ChangeAgePic(req)
  39.     # 输出json格式的字符串回包
  40.     print(resp.to_json_string())
  41. except TencentCloudSDKException as err:
  42.     print(err)
复制代码
用树莓派AI人像变换给自己一次“跨越年龄的体验”图17

        5.组合变年龄与渐变
        进一步了解了一下,人像变换产品下还有很多其他有意思的能力,我在想这些能力如果可以组合一下,应该会很有意思。比如人脸年龄变换+人像渐变,应该可以做成年龄渐变的效果。

  1. import json
  2. import sys
  3. import time
  4. import base64
  5. from tencentcloud.common import credential
  6. from tencentcloud.common.profile.client_profile import ClientProfile
  7. from tencentcloud.common.profile.http_profile import HttpProfile
  8. from tencentcloud.common.exception.tencent_cloud_sdk_exception import TencentCloudSDKException
  9. from tencentcloud.ft.v20200304 import ft_client, models
  10. # 读一个本地测试文件转换为base64编码
  11. def read_file(filename):
  12.     f = open(filename, 'rb')
  13.     base64_data = base64.b64encode(f.read())
  14.     return base64_data
  15. # 变年龄
  16. def change_age(client, img, age):
  17.     req = models.ChangeAgePicRequest()
  18.     params = {
  19.         "Image": img.decode("utf-8"),   # python里的bytes类型要转成string才可使用
  20.         "AgeInfos": [
  21.             {
  22.                 "Age": int(age)
  23.             }
  24.         ],
  25.         "RspImgType": "base64"
  26.     }
  27.     req.from_json_string(json.dumps(params))
  28.     resp = client.ChangeAgePic(req)
  29.     return resp
  30. # 人像渐变
  31. def morph_face(client, imgs):
  32.     req = models.MorphFaceRequest()
  33.     params = {
  34.         "Images": imgs,
  35.         # 更多细节可通过参数调节
  36.         # "GradientInfos": [
  37.         #     {
  38.         #         "Tempo": 1,
  39.         #         "MorphTime": 1
  40.         #     }
  41.         # ],
  42.         "Fps": 25
  43.     }
  44.     req.from_json_string(json.dumps(params))
  45.     resp = client.MorphFace(req)
  46.     print(resp.to_json_string())
  47.     return resp
  48. # 查询人像渐变结果
  49. def query_morph_face(client, job_id):
  50.     req = models.QueryFaceMorphJobRequest()
  51.     params = {
  52.         "JobId": job_id
  53.     }
  54.     req.from_json_string(json.dumps(params))
  55.     resp = client.QueryFaceMorphJob(req)
  56.     print(resp.to_json_string())
  57.     return resp
  58. try:
  59.     # 实例化一个认证对象,入参需要传入腾讯云账户secretId,secretKey,此处还需注意密钥对的保密
  60.     # 密钥可前往https://console.cloud.tencent.com/cam/capi网站进行获取
  61.     cred = credential.Credential("YourSecretId", "YourSecretKey")
  62.     # 实例化一个http选项,可选的,没有特殊需求可以跳过
  63.     httpProfile = HttpProfile()
  64.     httpProfile.endpoint = "ft.tencentcloudapi.com"
  65.     # 实例化一个client选项,可选的,没有特殊需求可以跳过
  66.     clientProfile = ClientProfile()
  67.     clientProfile.httpProfile = httpProfile
  68.     # 实例化要请求产品的client对象,clientProfile是可选的
  69.     client = ft_client.FtClient(cred, "ap-guangzhou", clientProfile)
  70.     # 读取图片
  71.     data = read_file(sys.argv[1])
  72.     ages = [20, 30, 40, 50, 60]
  73.     # 批量变年龄
  74.     imgs = []
  75.     for age in ages:
  76.         resp=change_age(client, data, age)
  77.         imgs.append(resp.ResultImage)
  78.         # 将图片集合起来调人像渐变
  79.     resp = morph_face(client, imgs)
  80.     job_id = resp.JobId
  81.     # 轮询查结果
  82.     resp=query_morph_face(client, job_id)
  83.     while resp.JobStatusCode != 7:
  84.         resp=query_morph_face(client, job_id)
  85.         time.sleep(2)
  86.    
  87. except TencentCloudSDKException as err:
  88.     print(err)
复制代码
【生成渐变视频二维码】
  1. import cv2
  2. import  qrcode
  3. from PIL import Image, ImageDraw, ImageFont
  4. # 打开视频文件
  5. url='http://bda-video-bodyseg-1254418846.cos.ap-guangzhou.myqcloud.com/video_morph_prod/1/1259541656/20231223235411_ff84a3ff-8046-4e75-9f26-ca751e9287e6_result.mp4'
  6. imgqrc = qrcode.make(url,version=1,border=4,box_size=1)
  7. imgqrc.save('output_image.jpg')  
  8. imgqrc = cv2.imread("output_image.jpg")
  9. imgqrc = cv2.resize(imgqrc,(200,200))
  10. cv2.namedWindow("Resultqrc", cv2.WINDOW_NORMAL)
  11. cv2.resizeWindow("Resultqrc", 220, 220)
  12. cv2.moveWindow("Resultqrc", 800, 500)
  13. cv2.imshow("Resultqrc", imgqrc)
  14. cv2.waitKey(10000)
  15. cv2.destroyAllWindows()
复制代码
【完整代码】
  1. import json,cv2
  2. import numpy as np
  3. import base64
  4. import time
  5. from tencentcloud.common import credential
  6. from tencentcloud.common.profile.client_profile import ClientProfile
  7. from tencentcloud.common.profile.http_profile import HttpProfile
  8. from tencentcloud.common.exception.tencent_cloud_sdk_exception import TencentCloudSDKException
  9. from tencentcloud.ft.v20200304 import ft_client, models
  10. import  qrcode
  11. from PIL import Image, ImageDraw, ImageFont
  12. # cv2转base64
  13. def cv2_to_base64(img):
  14.     img = cv2.imencode('.jpg', img)[1]
  15.     image_code = str(base64.b64encode(img))[2:-1]
  16.     return image_code
  17. # 变年龄
  18. def change_age(client, img, age):
  19.     # 实例化一个请求对象,每个接口都会对应一个request对象
  20.     req = models.ChangeAgePicRequest()
  21.     params = {
  22.         "Image": img,   # python里的bytes类型要转成string才可使用
  23.         "AgeInfos": [
  24.             {
  25.                 "Age": int(age)
  26.             }
  27.         ],
  28.         "RspImgType": "base64"
  29.     }
  30.     req.from_json_string(json.dumps(params))
  31.    
  32.     # 返回的resp是一个ChangeAgePicResponse的实例,与请求对象对应
  33.     resp = client.ChangeAgePic(req)
  34.     # 输出json格式的字符串回包
  35.     image_base64 = resp.ResultImage
  36.     image_data = base64.b64decode(image_base64)
  37.     np_array=np.frombuffer(image_data,np.uint8)
  38.     image=cv2.imdecode(np_array,cv2.IMREAD_COLOR)
  39.     cv2.imshow("Result", image)
  40.     cv2.waitKey(1)
  41.     return resp
  42. # 人像渐变
  43. def morph_face(client, imgs):
  44.     req = models.MorphFaceRequest()
  45.     params = {
  46.         "Images": imgs,
  47.         # 更多细节可通过参数调节
  48.         # "GradientInfos": [
  49.         #     {
  50.         #         "Tempo": 1,
  51.         #         "MorphTime": 1
  52.         #     }
  53.         # ],
  54.         "Fps": 25
  55.     }
  56.     req.from_json_string(json.dumps(params))
  57.     resp = client.MorphFace(req)
  58.     #print(resp.to_json_string())
  59.     return resp
  60. # 查询人像渐变结果
  61. def query_morph_face(client, job_id):
  62.     req = models.QueryFaceMorphJobRequest()
  63.     params = {
  64.         "JobId": job_id
  65.     }
  66.     req.from_json_string(json.dumps(params))
  67.     resp = client.QueryFaceMorphJob(req)
  68.     #print(resp.to_json_string())
  69.     return resp
  70. # 加载Haar级联分类器模型(预训练好的)
  71. face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
  72. # 从文件或者视频流中获取图像数据
  73. cap = cv2.VideoCapture(0)
  74. sum1=0
  75. sum2=0
  76. bs=0
  77. #ages = [5,10,15,20,25,30,35,40,45,50,55, 60,65,70,75,80,90,95,100]
  78. ages = [5,25,45,65,85]
  79. SecretId="#################"
  80. SecretKey="####################"
  81. # 实例化一个认证对象,入参需要传入腾讯云账户 SecretId 和 SecretKey,此处还需注意密钥对的保密
  82. # 代码泄露可能会导致 SecretId 和 SecretKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考,建议采用更安全的方式来使用密钥,请参见:https://cloud.tencent.com/document/product/1278/85305
  83. # 密钥可前往官网控制台 https://console.cloud.tencent.com/cam/capi 进行获取
  84. cred = credential.Credential(SecretId, SecretKey)
  85. # 实例化一个http选项,可选的,没有特殊需求可以跳过
  86. httpProfile = HttpProfile()
  87. httpProfile.endpoint = "ft.tencentcloudapi.com"
  88. # 实例化一个client选项,可选的,没有特殊需求可以跳过
  89. clientProfile = ClientProfile()
  90. clientProfile.httpProfile = httpProfile
  91. # 实例化要请求产品的client对象,clientProfile是可选的
  92. client = ft_client.FtClient(cred, "ap-beijing", clientProfile)
  93. x3=220
  94. y3=140
  95. w3=200
  96. h3=200        
  97. while True:
  98.     ret, img = cap.read()
  99.     if ret:
  100.       
  101.        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
  102.        # 对图像进行人脸检测
  103.        faces = face_cascade.detectMultiScale(gray, scaleFactor=1.3, minNeighbors=5, flags=cv2.CASCADE_SCALE_IMAGE)
  104.        # 标记并显示检测到的人脸区域
  105.        if len(faces)!=0:
  106.            
  107.            sum2=0
  108.            if bs==0:
  109.             for (x, y, w, h) in faces:
  110.              if abs(x-x3)<20 and abs(y-y3)<20 and abs(w-w3)<20 and abs(h-h3)<20:#当识别到的人脸区域与基准区域接近时,启动人脸年龄变换
  111.               sum1=sum1+1
  112.               if sum1>10:
  113.                 bs=1
  114.                 data=cv2_to_base64(img)
  115.                 imgs = []
  116.                 for age in ages:
  117.                     resp=change_age(client, data, age)
  118.                     imgs.append(resp.ResultImage)
  119.                     time.sleep(30)
  120.                     print(age)
  121.                 # 将图片集合起来调人像渐变
  122.                 cv2img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
  123.                 pilimg = Image.fromarray(cv2img)
  124.                 # PIL图片上打印汉字
  125.                 draw = ImageDraw.Draw(pilimg) # 图片上打印
  126.                 #simsun 宋体
  127.                 font = ImageFont.truetype("SIMHEI.TTF", 40, encoding="utf-8")
  128.                 #位置,文字,颜色==红色,字体引入
  129.                 draw.text((5, 430), "人脸年龄渐变视频正在生成中……", (255, 0, 0), font=font)
  130.                 # PIL图片转cv2 图片
  131.                 img = cv2.cvtColor(np.array(pilimg), cv2.COLOR_RGB2BGR)
  132.                 cv2.imshow("Result", img)
  133.                 cv2.waitKey(1)
  134.                 resp = morph_face(client, imgs)
  135.                 job_id = resp.JobId
  136.                 # 轮询查结果
  137.                 resp=query_morph_face(client, job_id)
  138.                 while resp.JobStatusCode != 7:
  139.                    resp=query_morph_face(client, job_id)
  140.                   
  141.                    time.sleep(2)
  142.                 #生成渐变视频二维码
  143.                 url=resp.FaceMorphOutput.MorphUrl
  144.                 imgqrc = qrcode.make(url,version=1,border=4,box_size=1)
  145.                 imgqrc.save('output_image.jpg')  
  146.                 imgqrc = cv2.imread("output_image.jpg")
  147.                 imgqrc = cv2.resize(imgqrc,(200,200))
  148.                 cv2.namedWindow("Resultqrc", cv2.WINDOW_NORMAL)
  149.                 cv2.resizeWindow("Resultqrc", 220, 220)
  150.                 cv2.moveWindow("Resultqrc", 800, 500)
  151.                 cv2.imshow("Resultqrc", imgqrc)
  152.                 cv2.waitKey(1)
  153.                 cap1 = cv2.VideoCapture(url)
  154.                 print(resp.FaceMorphOutput.MorphUrl)
  155.                 print(cap1.get(cv2.CAP_PROP_FRAME_WIDTH))
  156.                 print(cap1.get(cv2.CAP_PROP_FRAME_HEIGHT))
  157.                 for i in range(8):
  158.                   cap1.set(cv2.CAP_PROP_POS_FRAMES,0)
  159.                   ret, img1 = cap1.read()
  160.                   while ret:
  161.                     # 设置区域位置
  162.                     x1, y1 = 0, 380    # 左上角点的 x、y 坐标
  163.                     x2, y2 = 720, 910   # 右下角点的 x、y 坐标
  164.                     # 提取指定区域的子图像
  165.                     img1 = img1[y1:y2, x1:x2]
  166.                     cv2.imshow("Result", img1)
  167.                     cv2.waitKey(1)
  168.                     ret, img1 = cap1.read()
  169.                 cv2.destroyAllWindows("Resultqrc")
  170.            for (x, y, w, h) in faces:
  171.                 cv2.rectangle(img, (x, y), (x+w, y+h), (0, 255, 0), 3)
  172.        else:
  173.            sum1=0
  174.            if bs==1:
  175.              sum2=sum2+1
  176.              if sum2>100:
  177.                bs=0
  178.        print(sum1,sum2)
  179.        # 展示结果图片
  180.        cv2.rectangle(img, (x3, y3), (x3+w3, y3+h3), (255, 0, 255), 4)
  181.        cv2.imshow("Result", img)
  182.        cv2.waitKey(1)
  183. cv2.destroyAllWindows()
复制代码
用树莓派AI人像变换给自己一次“跨越年龄的体验”图21


用树莓派AI人像变换给自己一次“跨越年龄的体验”图20


用树莓派AI人像变换给自己一次“跨越年龄的体验”图19






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

本版积分规则

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

硬件清单

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

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

mail