在做人工智能检测印章时遇到了问题

在做人工智能检测印章时遇到了问题:我需要把该yolov5的处理结果转换成base64传给另一个模型进行识别,但是该代码的结果是一个列表,我该如何处理?
代码如下:

import torch
from PIL import Image


def yolo_model_load(model_path):
    model = torch.hub.load('D:/test11/yolov5',
                           'custom',
                           path=model_path,
                           source='local',
                           force_reload=True)  # local repo
    model.conf = 0.4
    model.eval()
    return model

if __name__ == '__main__':
    from PIL import Image

    model_path = 'D:/test11/yolov5/models/seal_detect_best.pt'

    image = Image.open('D:/test11/yolov5/8.png')
    model = yolo_model_load(model_path)
    yolo_res = model(image, size=640)
    yolo_res.show()
    yolo_res_list = yolo_res.pandas().xyxy[0].values.tolist()
    print(type(yolo_res_list))
    print('印章识别结果:', yolo_res_list)

结果如下:

D:\Anaconda3\envs\cj-env\python.exe D:\test11\yolov5\test1.py 
YOLOv5  v6.1-275-g29d79a6 Python-3.7.16 torch-1.13.1+cu117 CUDA:0 (NVIDIA GeForce RTX 3070 Ti Laptop GPU, 8192MiB)

Fusing layers... 
YOLOv5s summary: 213 layers, 7015519 parameters, 0 gradients
Adding AutoShape... 
'list'>
印章识别结果: [[758.1011962890625, 1005.4564208984375, 1178.61376953125, 1428.8299560546875, 0.9835438132286072, 0, 'seal_y'], [2428.508056640625, 1034.09228515625, 2805.164306640625, 1410.1837158203125, 0.9834598302841187, 0, 'seal_y']]

Process finished with exit code 0

我要达成的目的:我需要把该yolov5的处理结果转换成base64传给另一个模型进行识别,该模型需要的参数格式是base64

编码成2进制后用base64转下

import json
import base64

#yolo_res_list = yolo_res.pandas().xyxy[0].values.tolist()
yolo_res_list=[[758.1011962890625, 1005.4564208984375, 1178.61376953125, 1428.8299560546875, 0.9835438132286072, 0, 'seal_y'], [2428.508056640625, 1034.09228515625, 2805.164306640625, 1410.1837158203125, 0.9834598302841187, 0, 'seal_y']]
yolo_res_liststr=json.dumps(yolo_res_list)#转json字符串
base64str=str(base64.b64encode(yolo_res_liststr.encode('utf-8')))
print(type(base64str))

基于new Bing的回答:
可以在代码的最后添加以下几行来将yolo_res_list转换为base64编码:

import base64
import json

yolo_res_str = json.dumps(yolo_res_list)
yolo_res_base64 = base64.b64encode(yolo_res_str.encode('utf-8')).decode('utf-8')

这样,您就可以将yolo_res_base64传递给另一个模型进行识别了。希望这对您有所帮助!

import json
import base64

# yolo_res_list 是YOLOv5的处理结果
yolo_res_json = json.dumps(yolo_res_list)
yolo_res_base64 = base64.b64encode(yolo_res_json.encode('utf-8'))

print('印章识别结果(Base64):', yolo_res_base64.decode('utf-8'))


以下内容部分参考ChatGPT模型:


可以使用Python的base64模块将结果转换成base64编码。首先需要将列表转换成字符串,然后再使用base64模块进行编码。代码如下:

import base64

假设处理结果是一个列表,名为result

result = [1, 2, 3, 4, 5]

将列表转换成字符串

result_str = ','.join(map(str, result))

进行base64编码

result_base64 = base64.b64encode(result_str.encode('utf-8'))

将结果传给另一个模型进行识别

other_model(result_base64)

其中,other_model是你需要调用的另一个模型的函数,传入的参数是base64编码后的字符串。在另一个模型中,需要先将字符串进行解码,再进行识别。代码如下:

import base64

def other_model(result_base64):
    # 将base64编码后的字符串解码
    result_str = base64.b64decode(result_base64).decode('utf-8')

    # 将字符串转换成列表
    result = list(map(int, result_str.split(',')))

    # 进行识别
    # ...

其中,result_str.split(',')将字符串按照逗号分隔符分成多个字符串,然后使用map函数将每个字符串转换成整数,最后使用list函数将它们组成一个列表。


如果我的建议对您有帮助、请点击采纳、祝您生活愉快

该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
要将 YOLOv5 的处理结果转换为 base64 格式,您可以先将结果转换为 JSON 字符串,然后再将 JSON 字符串转换为 base64 编码的字符串。具体步骤如下:

1、 将 YOLOv5 的处理结果转换为 JSON 字符串。您可以使用 Python 内置的 json 库来实现:

import json

yolo_res_json = json.dumps(yolo_res_list)

2、 将 JSON 字符串转换为 base64 编码的字符串。您可以使用 Python 内置的 base64 库来实现:

import base64

yolo_res_base64 = base64.b64encode(yolo_res_json.encode('utf-8')).decode('utf-8')

这样,您就可以得到 YOLOv5 的处理结果的 base64 编码字符串了。

完整的代码示例如下:

import torch
from PIL import Image
import json
import base64

def yolo_model_load(model_path):
    model = torch.hub.load('D:/test11/yolov5',
                           'custom',
                           path=model_path,
                           source='local',
                           force_reload=True)  # local repo
    model.conf = 0.4
    model.eval()
    return model

if __name__ == '__main__':
    model_path = 'D:/test11/yolov5/models/seal_detect_best.pt'

    image = Image.open('D:/test11/yolov5/8.png')
    model = yolo_model_load(model_path)
    yolo_res = model(image, size=640)
    yolo_res_list = yolo_res.pandas().xyxy[0].values.tolist()

    # 将 YOLOv5 的处理结果转换为 base64 编码字符串
    yolo_res_json = json.dumps(yolo_res_list)
    yolo_res_base64 = base64.b64encode(yolo_res_json.encode('utf-8')).decode('utf-8')
    print('印章识别结果(base64 编码):', yolo_res_base64)

注意:如果您的另一个模型需要的参数格式是 JSON 格式,您可以直接将 YOLOv5 的处理结果转换为 JSON 字符串,而不需要再转换为 base64 编码的字符串。


如果以上回答对您有所帮助,点击一下采纳该答案~谢谢

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
您可以使用Python模块base64将列表转换为base64字符串。可以按照以下步骤操作:

  1. 将列表转换为json字符串。
  2. 将json字符串转换为bytes。
  3. 使用base64模块中的b64encode函数将bytes转换为base64字符串。

以下是示例代码:

import json
import base64

将列表转换为json字符串

yolo_res_json = json.dumps(yolo_res_list)

将json字符串转换为bytes

yolo_res_bytes = yolo_res_json.encode('utf-8')

将bytes转换为base64字符串

yolo_res_base64 = base64.b64encode(yolo_res_bytes).decode('utf-8')

打印结果

print(yolo_res_base64)

您可以将yolo_res_base64传递给其他模型进行识别。如果需要,您可以使用相同的方法将结果从base64字符串转换回列表。可以按照以下步骤操作:

  1. 使用base64模块中的b64decode函数将base64字符串转换为bytes。
  2. 将bytes转换为json字符串。
  3. 将json字符串转换为列表。

以下是示例代码:

将base64字符串转换为bytes

yolo_res_bytes = base64.b64decode(yolo_res_base64.encode('utf-8'))

将bytes转换为json字符串

yolo_res_json = yolo_res_bytes.decode('utf-8')

将json字符串转换为列表

yolo_res_list = json.loads(yolo_res_json)

打印结果

print(yolo_res_list)

希望这可以帮助您解决问题。
如果我的回答解决了您的问题,请采纳!

引用chatGPT作答,要将一个列表转换为base64格式,需要先将列表转换为字符串,然后将该字符串编码为bytes类型,最后将该bytes类型进行base64编码。下面是一个示例代码,可以将yolo_res_list转换为base64格式:

import json
import base64

yolo_res_json = json.dumps(yolo_res_list)  # 将列表转换为JSON字符串
yolo_res_bytes = yolo_res_json.encode('utf-8')  # 将字符串编码为bytes类型
yolo_res_base64 = base64.b64encode(yolo_res_bytes)  # 将bytes类型进行base64编码

print('印章识别结果(base64):', yolo_res_base64)

输出结果应该类似于:

印章识别结果(base64): b'WzEwMjguMTAxMTk2Mjg5MDYyNSwgNzU4LjEwMTE5NjI4OTQwNDYyNSwgMTE3OC42MTM3NzY5NTMyNSwgMTQyOC44Mjk5NTYwNTQ1LCAwLjk4MzU0ODMzMjI4NjA3MiwgMCwsInNlYWxfaSI=',
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632

该回答引用chatgpt:
如果您想将列表转换为Base64编码的字符串,可以使用Python的base64模块。具体来说,您可以使用json模块将列表转换为JSON字符串,然后使用base64模块将该字符串编码为Base64字符串。示例代码如下:

import json
import base64

# 将yolo_res_list转换为JSON字符串
json_str = json.dumps(yolo_res_list)

# 将JSON字符串编码为Base64字符串
base64_str = base64.b64encode(json_str.encode('utf-8')).decode('utf-8')

# 输出Base64字符串
print(base64_str)