AIGC与AidLux互联应用—Aidlux端AIGC测评

2023-06-03 17:42:53 浏览数 (1)

本帖子源于AidLux面向众多开发者的AIGC训练营,目的在于实现使用stablediffusion生成图片传输到AidLux端实现目标检测。分享部分传输检测代码及其实现视频如下:

视频内容
代码语言:javascript复制
import socket
import cv2
import numpy as np
import time
import sys
 
### 本代码主要是客户端代码,aidlux上的Socket_fuwuduan.py是匹配的服务端代码,当服务端代码启动时,由本代码读取一张图片,推送过去
 
def recvall(sock, count):
    buf = b''  # buf是一个byte类型
    while count:
        newbuf = sock.recv(count)
        if not newbuf: return None
        buf  = newbuf
        count -= len(newbuf)
    return buf
 
def SendAIGC():
    # 建立sock连接
    # address要连接的aidlux服务器IP地址和端口号
    address = ('192.168.137.116', 9023)
    try:
        # 建立socket对象
        # socket.AF_INET:服务器之间网络通信
        # socket.SOCK_STREAM:流式socket , for TCP
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        # 开启连接
        sock.connect(address)
    except socket.error as msg:
        print(msg)
        sys.exit(1)
 
    ###########传送AIGC图片#################
    ## 如果本地没有GPU
    if 1:
        frame = cv2.imread("car.png")
        # # 压缩参数,后面cv2.imencode将会用到,对于jpeg来说,15代表图像质量,越高代表图像质量越好为 0-100,默认95
        encode_param = [int(cv2.IMWRITE_JPEG_QUALITY), 95]
        # cv2.imencode将图片格式转换(编码)成流数据,赋值到内存缓存中;主要用于图像数据格式的压缩,方便网络传输
        # '.jpg'表示将图片按照jpg格式编码。
        result, imgencode = cv2.imencode('.jpg', frame, encode_param)
        # 建立矩阵
        data = np.array(imgencode)
        # 将numpy矩阵转换成字符形式,以便在网络中传输
        stringData = data.tostring()
 
        # 先发送要发送的数据的长度
        # ljust() 方法返回一个原字符串左对齐,并使用空格填充至指定长度的新字符串
        sock.send(str.encode(str(len(stringData)).ljust(16)))
        # 发送数据
        sock.send(stringData)
    ### 如果本地有GPU
    # if 0:
    #     ### 本地生成AIGC图片 ###
    #     ## 添加AIGC代码 ##
    #     #####################
    #     frame = cv2.imread("car.png")
    #     # # 压缩参数,后面cv2.imencode将会用到,对于jpeg来说,15代表图像质量,越高代表图像质量越好为 0-100,默认95
    #     encode_param = [int(cv2.IMWRITE_JPEG_QUALITY), 95]
    #     # cv2.imencode将图片格式转换(编码)成流数据,赋值到内存缓存中;主要用于图像数据格式的压缩,方便网络传输
    #     # '.jpg'表示将图片按照jpg格式编码。
    #     result, imgencode = cv2.imencode('.jpg', frame, encode_param)
    #     # 建立矩阵
    #     data = np.array(imgencode)
    #     # 将numpy矩阵转换成字符形式,以便在网络中传输
    #     stringData = data.tostring()
 
    #     # 先发送要发送的数据的长度
    #     # ljust() 方法返回一个原字符串左对齐,并使用空格填充至指定长度的新字符串
    #     sock.send(str.encode(str(len(stringData)).ljust(16)))
    #     # 发送数据
    #     sock.send(stringData)
 
    # 读取服务器返回值
    receive = sock.recv(1000)
    receive1 = sock.recv(1000)
    receive2 = sock.recv(1000)
    i = 0
    if len(receive):
        print("图片发送成功")
        print("检测类别及其数目:")
        print(str(receive, encoding='utf-8'),str(receive1, encoding='utf-8'))
        
        # print(str(receive2, encoding='utf-8'))
 ### 之前接受的帧率数据,现在换成image流数据
 
    sock.close()
 
if __name__ == '__main__':
    SendAIGC()

该部分代码用于传输生成的图片到Aidlux端,并且接受返回的回馈信息。

0 人点赞