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

104 阅读4分钟

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

`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()

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()if name == 'main': SendAIGC()`