今年人工智能大火,那自然相关的应用也会衍生出来,AIGC就是其中之一。
AIGC是指“人工智能生成”(Artificial Intelligence Generated Content)的缩写。人工智能生成是指应用人工智能技术,如自然语言处理、机器学习和计算机视觉等,自动地生成各种类型的内容,如文字、图像、音频和视频等。
本文主要简单讲述Stable Diffusion,Stable Diffusion是一种基于扩散过程的概率图模型,用于建模连续时间的动态系统,并进行预测和推断。我们将会使用Stable Diffusion来生成各种各样的图片,然后通过PC端和AidLux间的通信,将图片传输到AidLux进行测评。
部分代码展示,以下是在PC端运行的通信代码
import socket
import time
import cv2
import numpy
import copy
def ReceiveVideo():
# IP地址'0.0.0.0'为等待客户端连接
address = ('192.168.0.101', 9023)
# 建立socket对象,参数意义见https://blog.csdn.net/rebelqsp/article/details/22109925
# socket.AF_INET:服务器之间网络通信
# socket.SOCK_STREAM:流式socket , for TCP
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 将套接字绑定到地址, 在AF_INET下,以元组(host,port)的形式表示地址.
s.bind(address)
# 开始监听TCP传入连接。参数指定在拒绝连接之前,操作系统可以挂起的最大连接数量。该值至少为1,大部分应用程序设为5就可以了。
s.listen(5)
def recvall(sock, count):
buf = b'' # buf是一个byte类型
while count:
# 接受TCP套接字的数据。数据以字符串形式返回,count指定要接收的最大数据量.
newbuf = sock.recv(count)
if not newbuf: return None
buf += newbuf
count -= len(newbuf)
return buf
# 接受TCP连接并返回(conn,address),其中conn是 新的套接字对象,可以用来接收和发送数据。addr是连接客户端的地址。
# 没有连接则等待有连接
conn, addr = s.accept()
print('connect from PC:' + str(addr))
if 1:
start = time.time() # 用于计算帧率信息
length = recvall(conn, 16) # 获得图片文件的长度,16代表获取长度
stringData = recvall(conn, int(length)) # 根据获得的文件长度,获取图片文件
data = numpy.frombuffer(stringData, numpy.uint8) # 将获取到的字符流数据转换成1维数组
decimg = cv2.imdecode(data, cv2.IMREAD_COLOR) # 将数组解码成图像
cv2.imwrite("girl.jpg",decimg)
print("save image ")
# cv2.imshow('SERVER', decimg) # 显示图像
# cv2.waitKey(2000)
#
# # 进行下一步处理
# # 。
# # 。
# # 。
#
# # 将帧率信息回传,主要目的是测试可以双向通信
end = time.time()
seconds = end - start
fps = 1 / seconds
##返回已处理图像到客户端
conn.send(bytes(str(int(fps)), encoding='utf-8'))
# image = copy.deepcopy(decimg)
# encode_param = [int(cv2.IMWRITE_JPEG_QUALITY), 100]
# result, imgencode = cv2.imencode('.jpg', image, encode_param)
# # 建立矩阵
# data = numpy.array(imgencode)
# # 将numpy矩阵转换成字符形式,以便在网络中传输
# img_Data = data.tostring()
# # 先发送要发送的数据的长度
# # ljust() 方法返回一个原字符串左对齐,并使用空格填充至指定长度的新字符串
# conn.send(str.encode(str(len(img_Data)).ljust(16)))
# # # print(img_Data)
# # # 发送数据
# conn.send(img_Data)
# if cv2.waitKey(10) & 0xff == 27:
# break
s.close()
# cv2.destroyAllWindows()
if __name__ == '__main__':
ReceiveVideo()
图片成功从PC端传到AidLux端
在AidLux我们启用我们的测评代码,测评部分我们还是使用yolov5网络对图片进行测评
以下是整个流程的视频展示
AIGC测评视频