当前位置:网站首页>常用函数detect_image/predict
常用函数detect_image/predict
2022-07-07 02:14:00 【逆夏11111】
detect_image
#---------------------------------------------------#
# 检测图片
#---------------------------------------------------#
def detect_image(self, image):
start = timer()
image_shape = np.array(np.shape(image)[0:2])
crop_img, x_offset, y_offset = letterbox_image(image, (self.model_image_size[0], self.model_image_size[1]))
photo = np.array(crop_img, dtype=np.float64)
# 图片预处理,归一化
photo = preprocess_input(np.reshape(photo, [1, self.model_image_size[0], self.model_image_size[1], 3]))
preds = self.ssd_model.predict(photo)
# 将预测结果进行解码
results = self.bbox_util.detection_out(preds, confidence_threshold=self.confidence)
# print(results)
if len(results[0]) <= 0:
return image, []
# 筛选出其中得分高于confidence的框
det_label = results[0][:, 0]
det_conf = results[0][:, 1]
det_xmin, det_ymin, det_xmax, det_ymax = results[0][:, 2], results[0][:, 3], results[0][:, 4], results[0][:, 5]
top_indices = [i for i, conf in enumerate(det_conf) if conf >= self.confidence]
top_conf = det_conf[top_indices]
top_label_indices = det_label[top_indices].tolist()
top_xmin, top_ymin, top_xmax, top_ymax = np.expand_dims(det_xmin[top_indices], -1), np.expand_dims(
det_ymin[top_indices], -1), np.expand_dims(det_xmax[top_indices], -1), np.expand_dims(det_ymax[top_indices],
-1)
# 去掉灰条
boxes = retinanet_correct_boxes(top_ymin, top_xmin, top_ymax, top_xmax,
np.array([self.model_image_size[0], self.model_image_size[1]]), image_shape)
font = ImageFont.truetype(font='model_data/simhei.ttf',
size=np.floor(3e-2 * np.shape(image)[1] + 0.5).astype('int32'))
thickness = (np.shape(image)[0] + np.shape(image)[1]) // self.model_image_size[0]
record_pred = []
for i, c in enumerate(top_label_indices):
predicted_class = self.class_names[int(c) - 1]
score = top_conf[i]
top, left, bottom, right = boxes[i]
top = top - 5
left = left - 5
bottom = bottom + 5
right = right + 5
top = max(0, np.floor(top + 0.5).astype('int32'))
left = max(0, np.floor(left + 0.5).astype('int32'))
bottom = min(np.shape(image)[0], np.floor(bottom + 0.5).astype('int32'))
right = min(np.shape(image)[1], np.floor(right + 0.5).astype('int32'))
print(top, left, bottom, right)
# 画框框
label = '{} {:.2f}'.format(predicted_class, score)
draw = ImageDraw.Draw(image)
label_size = draw.textsize(label, font)
# label = label.encode('utf-8') # 这里如果要变成utf8
print(label, (left, top), (right, bottom))
record_pred.append(label + " %s %s %s %s" % (left, top, right, bottom))
if top - label_size[1] >= 0:
text_origin = np.array([left, top - label_size[1]])
else:
text_origin = np.array([left, top + 1])
for i in range(thickness):
draw.rectangle(
[left + i, top + i, right - i, bottom - i],
outline=self.colors[int(c) - 1])
draw.rectangle(
[tuple(text_origin), tuple(text_origin + label_size)],
fill=self.colors[int(c) - 1])
draw.text(text_origin, label, fill=(0, 0, 0), font=font) # 如果前面label换成utf-8这里应该转变回来:str(label,'UTF-8')
del draw
end = timer()
print("detect time:", end - start)
return image, record_pred
不同模型要换的只有: boxes = ssd_correct_boxes(top_ymin,top_xmin,top_ymax,top_xmax,np.array([self.model_image_size[0],self.model_image_size[1]]),image_shape)
去掉灰条的部分,ssd模型就是ssd_correct,retinanet模型就是retinanet_correct。。。依次类推
predict
from keras.layers import Input
from retinanet import Retinanet
from PIL import Image
import os
retinanet = Retinanet()
img_path = "data/train1/domain1" # TODO:输入的要测试的图片文件夹
predict_path = "mAP/predict/"
filename_list = os.listdir(img_path)
for filename in filename_list:
print(filename)
img = input(filename)
try:
image = Image.open(img)
except:
print('Open Error! Try again!')
else:
r_image,record_pred = retinanet.detect_image(image)
with open(predict_path + filename.split(".")[0] + '.txt', "w") as f:
f.write("\n".join(record_pred))
# r_image.save("mAP/predict_images/"+filename)
retinanet.close_session()
边栏推荐
- 安装mongodb数据库
- LM11丨重构K线构建择时交易策略
- How to use wechat cloud hosting or cloud functions for cloud development of unapp development applet
- c面试 加密程序:由键盘输入明文,通过加密程序转换成密文并输出到屏幕上。
- 二十岁的我4面拿到字节跳动offer,至今不敢相信
- 港科大&MSRA新研究:关于图像到图像转换,Fine-tuning is all you need
- Performance comparison between Ceres solver and g2o
- MySQL installation
- JWT 认证
- 反射(二)
猜你喜欢
Etcd database source code analysis -- starting from the start function of raftnode
CloudCompare-点对选取
请问如何查一篇外文文献的DOI号?
港科大&MSRA新研究:关于图像到图像转换,Fine-tuning is all you need
JWT certification
LM11丨重构K线构建择时交易策略
软件测试到了35岁,真的就干不动了吗?
Abnova 体外转录 mRNA工作流程和加帽方法介绍
VMware安装后打开就蓝屏
Doctoral application | Professor Hong Liang, Academy of natural sciences, Shanghai Jiaotong University, enrolls doctoral students in deep learning
随机推荐
Unity C# 函数笔记
港科大&MSRA新研究:关于图像到图像转换,Fine-tuning is all you need
Software testing knowledge reserve: how much do you know about the basic knowledge of "login security"?
Navicat导入15G数据报错 【2013 - Lost connection to MySQL server during query】 【1153:Got a packet bigger】
Several key steps of software testing, you need to know
[opencv] morphological filtering (2): open operation, morphological gradient, top hat, black hat
Party A's requirements for those who have lost 800 yuan
Markdown 并排显示图片
2022 Android interview essential knowledge points, a comprehensive summary
tkinter窗口选择pcd文件并显示点云(open3d)
Google Chrome browser released patch 103.0.5060.114 to fix the 0-day vulnerability
uniapp开发小程序如何使用微信云托管或云函数进行云开发
学习笔记|数据小白使用DataEase制作数据大屏
dolphinscheduler3. X local startup
[solution] final app status- undefined, exitcode- 16
3531. Huffman tree
微信小程序隐藏video标签的进度条组件
C language interview to write a function to find the first public string in two strings
Symmetric binary tree [tree traversal]
二十岁的我4面拿到字节跳动offer,至今不敢相信