AIGC与AidLux互联应用——AidLux端AIGC测评(三)AidLux端AIGC测评系统搭建(Aidlux s855边缘计算盒子,安卓手机也可)及拓展研究方向

这篇具有很好参考价值的文章主要介绍了AIGC与AidLux互联应用——AidLux端AIGC测评(三)AidLux端AIGC测评系统搭建(Aidlux s855边缘计算盒子,安卓手机也可)及拓展研究方向。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

AIGC与AidLux互联应用——AidLux端AIGC测评(三)AidLux端AIGC测评系统搭建(Aidlux s855边缘计算盒子,安卓手机也可)及拓展研究方向,AIGC,边缘计算,android
简单来说,就是pc端通过文生图、图生图等形式生成图片,通过socket传递给Aidlux端,Aidlux进行测评并返回结果。
下面简要介绍下Aidlux:Aidlux是一套基于安卓平台边缘计算系统,类似于在安卓平台中嵌入ubuntu系统,可以在安卓手机中下载,也可以在Aidlux发布的边缘计算盒子中运行,我是在Aidlux s855边缘计算盒子中使用,用安卓手机也可以运行demo,只不过边缘计算盒子考虑工业性,散热、接口更丰富。

AIGC与AidLux互联应用——AidLux端AIGC测评(三)AidLux端AIGC测评系统搭建(Aidlux s855边缘计算盒子,安卓手机也可)及拓展研究方向,AIGC,边缘计算,android

AIGC与AidLux互联应用——AidLux端AIGC测评(三)AidLux端AIGC测评系统搭建(Aidlux s855边缘计算盒子,安卓手机也可)及拓展研究方向,AIGC,边缘计算,android

本文采用的是本地gpu运行(win系统下运行,ubuntu系统下也可)

Aidlux端代码如下,在Aidlux端使用:python Socket_Aidlux.py 调用(注意,先运行Aidlux端代码,再运行pc端代码)

import socket
import time
import cv2
import numpy
import copy


# aidlux相关
from cvs import *
import aidlite_gpu
from utils import detect_postprocess, preprocess_img, draw_detect_res
#, extract_detect_res

import time
import cv2

def ReceiveVideo():
    # IP地址'0.0.0.0'为等待客户端连接
    address = ('192.168.31.5', 9000)
    # 建立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("car.jpg",decimg)
        print("save image ")
        # cv2.imshow('SERVER', decimg)  # 显示图像
        # cv2.waitKey(2000)
        #
        # # 进行下一步处理
        # # 。
        # # 。
        # # 。
        #

        # AidLite初始化:调用AidLite进行AI模型的加载与推理,需导入aidlite
        aidlite = aidlite_gpu.aidlite()
        # Aidlite模型路径
        model_path = '/home//models/yolov5n-fp16.tflite'
        # 定义输入输出shape
        in_shape = [1 * 640 * 640 * 3 * 4]
        out_shape = [1 * 25200 * 85 * 4]
        # 加载Aidlite检测模型:支持tflite, tnn, mnn, ms, nb格式的模型加载
        aidlite.ANNModel(model_path, in_shape, out_shape, 4, 0)

        # 读取图片进行推理
        # 设置测试集路径
        source = "/home/AIGC/images/AIGC"
        images_list = os.listdir(source)
        print(images_list)
        frame_id = 0
        # 读取数据集
        for image_name in images_list:
            frame_id += 1
            print("frame_id:", frame_id)
            image_path = os.path.join(source, image_name)
            frame = cvs.imread(image_path)

            # 预处理
            img = preprocess_img(frame, target_shape=(640, 640), div_num=255, means=None, stds=None)
            # 数据转换:因为setTensor_Fp32()需要的是float32类型的数据,所以送入的input的数据需为float32,大多数的开发者都会忘记将图像的数据类型转换为float32
            aidlite.setInput_Float32(img, 640, 640)
            # 模型推理API
            aidlite.invoke()
            # 读取返回的结果
            pred = aidlite.getOutput_Float32(0)
            # 数据维度转换
            pred = pred.reshape(1, 25200, 85)[0]
            # 模型推理后处理
            pred = detect_postprocess(pred, frame.shape, [640, 640, 3], conf_thres=0.25, iou_thres=0.45)
            # 绘制推理结果
            res_img = draw_detect_res(frame, pred)
            cvs.imshow(res_img)

            # 测试结果展示停顿
            time.sleep(5)




        # # 将帧率信息回传,主要目的是测试可以双向通信
        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端代码:

import socket
import cv2
import numpy as np
import time
import sys

### 本代码主要是客户端代码,aidlux上的Socket_fuwuduan.py是匹配的服务端代码,当服务端代码启动时,由本代码读取一张图片,推送过去

import torch
# from torch import autocast
from torch.cuda.amp import autocast
from diffusers import StableDiffusionPipeline, DPMSolverMultistepScheduler,DDIMScheduler


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.31.5', 9529)
    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代码 ##
        #####################

    model_id = "E:/pycharmwenjian/Aidlux课程/AIGC训练营_Lesson2_code/models/stable-diffusion-v1-5"
    pipe = StableDiffusionPipeline.from_pretrained(model_id, torch_dtype=torch.float16)

    # In[13]:

    # pipe.scheduler = DPMSolverMultistepScheduler.from_config(pipe.scheduler.config)
    pipe.scheduler = DDIMScheduler.from_config(pipe.scheduler.config)
    pipe = pipe.to("cuda")

    # In[18]:

    prompt = "a car"
    negative_prompt = "(EasyNegative), bad_prompt_version2, (watermark), (signature), (sketch by bad-artist), (signature), (worst quality), (low quality), ((badhandsv5-neg)), ((badhandv4)), (bad anatomy), deformed hands, NSFW, nude, EasyNegative, (worst quality:1.4), (low quality:1.4), (normal quality:1.4),lowres,crowd"
# with autocast("cuda"):

    image = pipe(prompt,
                 negative_prompt=negative_prompt,
                 num_inference_steps=25,
                 width=512,
                 height=768,
                 guidance_scale=7.5).images[0]

    # In[19]:

    image.save("./car.png")



    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(16)
    if len(receive):
         print("图片发送成功")
         print(str(receive, encoding='utf-8'))  ### 之前接受的帧率数据,现在换成image流数据
    sock.close()

if __name__ == '__main__':
    SendAIGC()

AIGC与AidLux互联应用——AidLux端AIGC测评(三)AidLux端AIGC测评系统搭建(Aidlux s855边缘计算盒子,安卓手机也可)及拓展研究方向,AIGC,边缘计算,android

运行结果:

AIGC与AidLux互联应用——AidLux端AIGC测评(三)AidLux端AIGC测评系统搭建(Aidlux s855边缘计算盒子,安卓手机也可)及拓展研究方向,AIGC,边缘计算,android

AIGC与AidLux互联应用——AidLux端AIGC测评(三)AidLux端AIGC测评系统搭建(Aidlux s855边缘计算盒子,安卓手机也可)及拓展研究方向,AIGC,边缘计算,android
AIGC与AidLux互联应用——AidLux端AIGC测评(三)AidLux端AIGC测评系统搭建(Aidlux s855边缘计算盒子,安卓手机也可)及拓展研究方向,AIGC,边缘计算,android
演示视频

推理速度、准确度,检测速度,开辟内存存储图片减少硬盘存、读,批量生成图片并检测都是本代码可拓展方向文章来源地址https://www.toymoban.com/news/detail-587302.html

到了这里,关于AIGC与AidLux互联应用——AidLux端AIGC测评(三)AidLux端AIGC测评系统搭建(Aidlux s855边缘计算盒子,安卓手机也可)及拓展研究方向的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • AIGC与AidLux互联应用——AidLux端AIGC测评(一)jupyter 配置虚拟环境及ipynb转.py文件

    我们采用jupyter 运行ipynb的文生图和图生图代码,并且后面在AidLux端和pc端交互测评的时候需要将文生图和图生图ipynb代码转为.py文件插入交互测评代码中,所以需要对jupyter使用有所了解。 我们很多时候采用多个虚拟环境,防止各个版本、各个环境之间相互影响导致代码无法运

    2024年02月12日
    浏览(54)
  • AIGC与AidLux互联应用——AidLux端AIGC测评(二)PC端&云端Stable Diffusion模型推理应用(文生图,图生图)

    整体运行架构 Stable Diffusion模型搭建首先下载diffusers,然后安装,命令如下: git clone https://github.com/huggingface/diffusers.git pip install diffusers cd diffusers pip install . ubuntu和win系统下都可以 文生图,图生图代码和训练好的模型见百度网盘(训练好的模型很大,十几个g) 修改txt2jpg_in

    2024年02月09日
    浏览(58)
  • 基于AidLux的智慧教育版面分析应用

    融合架构操作系统AidLux,可以为单一ARM设备同时提供Android和Linux运行环境,双系统既能独立使用又能相互通信。 非虚拟机方式实现双系统融合并行 同时拥有两个系统的完整用户体验 无需重启即可在两个系统之间自由切换 非虚拟机模式,原生,稳定 支持Android/鸿蒙和Linux.互调

    2024年02月01日
    浏览(39)
  • 基于AidLux的自动驾驶智能预警应用方案

    1. 自动驾驶感知算法及AidLux相关方案介绍 1.1自动驾驶 自动驾驶汽车,又称无人驾驶车、电脑驾驶车、无人车、自驾车,是一种需要驾驶员辅助驾驶或者完全不需要操控的车辆。作为自动化载具,自动驾驶汽车可以不需要人类操作即能感知环境及导航。 1.2 自动驾驶系统的组成

    2024年02月13日
    浏览(49)
  • 基于边缘计算AidLux的自动驾驶智能预警应用方案

    上传源码至AidLux(具体操作见前面AIGC帖子) 配置环境: cd YOLOP/YOLOP pip install -r requirements.txt pip install torch 1.8.1 torchvision 0.9.1 -i https://pypi.mirrors.ustc.edu.cn/simple/ pip install onnxruntime -i https://pypi.mirrors.ustc.edu.cn/simple/ 进行推理: python tools/demo.py --source inference/images 报错进行如下操作

    2024年02月12日
    浏览(47)
  • 将闲置手机变废为宝——基于AidLux平台的智慧教育版面分析应用

            随着互联网技术以及社会经济等的高速发展, 教育行业迎来了人工智能技术的蓬勃发展,而 近年来随着教育信息化的不断推进,智能教育成为国家的重要战略之一。尤其在经过新冠疫情之后,社会对智能在线教育的迫切需求,使得对教科书、习题册等文档的自动分

    2024年01月19日
    浏览(48)
  • 基于人工智能与边缘计算Aidlux的鸟类检测驱赶系统(可修改为coco 80类目标检测)

    ●项目名称 基于人工智能与边缘计算Aidlux的鸟类检测驱赶系统(可修改为coco 80类目标检测) ●项目简介 本项目在Aidlux上部署鸟类检测驱赶系统,通过视觉技术检测到有鸟类时,会进行提示。并可在源码上修改coco 80类目标检测索引直接检测其他79类目标,可以直接修改、快速

    2024年02月12日
    浏览(56)
  • 让手机平板成为AI开发利器:AidLux

    远程登录 启动后,可以从控制台使用ifconfig 或者 使用桌面的“Cloud_ip应用图标”获得其ip地址如:192.168.0.2 ,那么就可以使用ssh 192.168.0.2 -p 9022登录该手机,也可以在浏览器使用http://192.168.0.2:8000 来登录图形界面。 用户名root,默认密码aidlux 安装python3.9环境 系统自带的python3.

    2024年04月14日
    浏览(32)
  • AidLux智慧交通AI安全之对抗攻击算法

    AI对抗攻击算法划分 目前主流对抗 攻击算法的总体分支与逻辑:           其中,当算法模型参数和训练数据等信息被攻击者所掌握,并且攻击者在此基础上进行的针对性攻击称为白盒攻击。白盒攻击主要分为基于梯度的攻击,基于优化的攻击以及基于GAN的攻击。而在对

    2024年02月04日
    浏览(33)
  • AidLux+无人机——AI电力巡检新模式

    近年来,航空、遥感、以及信息处理等技术迅速发展,使得无人机在电力巡检上逐渐应用开来。 无人机电力巡检作为新型电力巡检方式,不受地形地貌限制、便携易用且高效,能够极大程度降低传统巡检工作的风险和失误,提升工作效率。相关数据显示,无人机巡检比人工巡

    2024年02月12日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包