当前位置:网站首页>Common function detect_ image/predict
Common function detect_ image/predict
2022-07-07 07:07:00 【Inverse summer 11111】
detect_image
#---------------------------------------------------#
# Test pictures
#---------------------------------------------------#
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)
# Image preprocessing , normalization
photo = preprocess_input(np.reshape(photo, [1, self.model_image_size[0], self.model_image_size[1], 3]))
preds = self.ssd_model.predict(photo)
# Decode the prediction results
results = self.bbox_util.detection_out(preds, confidence_threshold=self.confidence)
# print(results)
if len(results[0]) <= 0:
return image, []
# Screen out those whose scores are higher than confidence Box of
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)
# Remove the gray strip
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)
# Picture frame
label = '{} {:.2f}'.format(predicted_class, score)
draw = ImageDraw.Draw(image)
label_size = draw.textsize(label, font)
# label = label.encode('utf-8') # If this place is going to become 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) # If the previous label Switch to utf-8 Here should be changed back :str(label,'UTF-8')
del draw
end = timer()
print("detect time:", end - start)
return image, record_pred
Different models need to be changed only : 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)
Remove the part of the gray strip ,ssd The model is ssd_correct,retinanet The model is retinanet_correct... By analogy
predict
from keras.layers import Input
from retinanet import Retinanet
from PIL import Image
import os
retinanet = Retinanet()
img_path = "data/train1/domain1" # TODO: Enter the image folder to test
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()
边栏推荐
- Stack and queue-p79-10 [2014 unified examination real question]
- from .onnxruntime_pybind11_state import * # noqa ddddocr运行报错
- sqlserver多线程查询问题
- 剑指offer-高质量的代码
- MOS tube parameters μ A method of Cox
- JDBC database connection pool usage problem
- Sword finger offer high quality code
- SolidWorks的GB库(钢型材库,包括铝型材、铝管等结构)安装及使用教程(生成铝型材为例)
- Bus消息总线
- Under what circumstances should we consider sub database and sub table
猜你喜欢
Bus message bus
SolidWorks的GB库(钢型材库,包括铝型材、铝管等结构)安装及使用教程(生成铝型材为例)
如何给目标机器人建模并仿真【数学/控制意义】
大促过后,销量与流量兼具,是否真的高枕无忧?
AVL树的实现
Composition API 前提
.net core 访问不常见的静态文件类型(MIME 类型)
Esxi attaching mobile (Mechanical) hard disk detailed tutorial
Special behavior of main function in import statement
$parent(获取父组件) 和 $root(获取根组件)
随机推荐
根据IP获取地市
Graduation design game mall
企業如何進行數據治理?分享數據治理4個方面的經驗總結
MySQL view bin log and recover data
2018年江苏省职业院校技能大赛高职组“信息安全管理与评估”赛项任务书
Lvs+kept (DR mode) learning notes
异步组件和Suspense(真实开发中)
华为机试题素数伴侣
工具类:对象转map 驼峰转下划线 下划线转驼峰
readonly 只读
The startup of MySQL installed in RPM mode of Linux system failed
[explanation of JDBC and internal classes]
分布式id解决方案
How to do sports training in venues?
大促过后,销量与流量兼具,是否真的高枕无忧?
Bus message bus
算法---比特位计数(Kotlin)
RuntimeError: CUDA error: CUBLAS_STATUS_ALLOC_FAILED when calling `cublasCreate(handle)`问题解决
什么情况下考虑分库分表
Answer to the second stage of the assignment of "information security management and evaluation" of the higher vocational group of the 2018 Jiangsu Vocational College skills competition