File size: 2,647 Bytes
117b368 b4049a7 117b368 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 |
import PIL.Image as Image
import io
from collections import Counter
from .mamasnowflake import *
# 根据两个点坐标截取人物画像图片
def get_one_person(xyxy,
img):
crop = img[int(xyxy[0, 1]):int(xyxy[0, 3]), int(xyxy[0, 0]):int(xyxy[0, 2]), ::(-1)]
result = output_to_binary(crop)
return result
# 保存图像
def save_img_as_png(img,
file_path,
RGB=0):
if RGB:
Image.fromarray(img).save(file_path, format='PNG', quality=100, subsampling=0)
else:
Image.fromarray(img[..., ::-1]).save(file_path, format='PNG', quality=100, subsampling=0)
# 获取人物名称
def get_one_name():
# 获取雪花算法对象
snowflake = Snowflake(datacenter_id=1, worker_id=3)
# 调用雪花算法获取文件名
randID = snowflake.generate()
randID = str(randID)
file_name = f'{randID}.png'
return file_name
# 从字符串获取其中的第一个数字
def extract_first_number(s):
for char in s:
if char.isdigit():
return int(char)
return -1 # 如果字符串中没有数字,返回-1
# 检查字符串中是否包含关键词列表中的关键词
def contains_any_keyword(string, keywords):
for keyword in keywords:
if keyword in string:
return True
return False
# 将PNG转换为二进制
def png_to_binary(file_path='../data/temp/temp.png'):
with open(file_path, 'rb') as file:
binary_data = file.read()
return binary_data
# 将模型输出转换为二进制
def output_to_binary(img_array):
# 创建PIL图像对象
img = Image.fromarray(img_array)
# 将图像保存为PNG格式到BytesIO对象
binary_data = io.BytesIO()
img.save(binary_data, format='PNG')
# 获取二进制数据
binary_data = binary_data.getvalue()
return binary_data
# 计算预测值与目标值之间的function_loss、total_loss以及avg_loss
def calculate_loss(predictions, targets):
# 计算每一对数值之间的损失的绝对值
function_loss = [abs(int(pred) - int(target)) for pred, target in zip(predictions, targets)]
# 计算总的损失
total_loss = sum(function_loss)
# 计算平均损失
avg_loss = total_loss / len(predictions)
result = {'function_loss': function_loss,
'total_loss': total_loss,
'avg_loss': avg_loss,
'total_person_num': len(predictions)
}
return result
# 统计词汇次数
def count_words_in_strings(strings):
word_counts = Counter()
word_counts.update(strings)
return dict(word_counts)
|