在做人工智能检测印章时遇到了问题:我需要把该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'))
可以使用Python的base64模块将结果转换成base64编码。首先需要将列表转换成字符串,然后再使用base64模块进行编码。代码如下:
import base64
result = [1, 2, 3, 4, 5]
result_str = ','.join(map(str, result))
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字符串。可以按照以下步骤操作:
以下是示例代码:
import json
import base64
yolo_res_json = json.dumps(yolo_res_list)
yolo_res_bytes = yolo_res_json.encode('utf-8')
yolo_res_base64 = base64.b64encode(yolo_res_bytes).decode('utf-8')
print(yolo_res_base64)
您可以将yolo_res_base64传递给其他模型进行识别。如果需要,您可以使用相同的方法将结果从base64字符串转换回列表。可以按照以下步骤操作:
以下是示例代码:
yolo_res_bytes = base64.b64decode(yolo_res_base64.encode('utf-8'))
yolo_res_json = yolo_res_bytes.decode('utf-8')
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=',
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!该回答引用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)