-
Notifications
You must be signed in to change notification settings - Fork 4
/
onnx_halcon.txt
83 lines (71 loc) · 2.84 KB
/
onnx_halcon.txt
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
##############################################################################
# File generated by HDevelop for text file Version 21.05.0.0
# Non-ASCII strings in this file are encoded in UTF-8.
#
# Please note that non-ASCII characters in string constants are exported
# as octal codes in order to guarantee that the strings are correctly
# created on all systems, independent on any compiler settings.
#
# Source files with different encoding should not be mixed in one project.
##############################################################################
# Main procedure
*
* Classification of image using ONNX model
*
ImagePath := 'ng/42.bmp'
ModelPath := 'my_model_sim.onnx'
OutputNodeName := 'Gemm_10'
ClassNames := ['ok', 'ng']
* read image
read_image (Image, ImagePath)
convert_image_type (Image, Image, 'real')
* read and subtract mean image
read_image (ImageMean, 'data_mean')
convert_image_type (ImageMean, ImageMean, 'real')
sub_image (Image, ImageMean, ImageSub, 1.0/255, 0.0)
* get desired part of image
crop_part (ImageSub, ImageClipped, 0, 40, 320, 160)
* load onnx model
read_dl_model (ModelPath, DLModelHandle)
* set model
get_system ('cuda_devices', Info)
tuple_length (Info, NumGPU)
if (NumGPU==0)
set_dl_model_param (DLModelHandle, 'runtime', 'cpu')
endif
set_dl_model_param (DLModelHandle, 'batch_size', 1)
set_dl_model_param (DLModelHandle, 'type', 'generic')
set_dl_model_param (DLModelHandle, 'runtime_init', 'immediately')
* get input size from model
get_dl_model_param (DLModelHandle, 'input_dimensions', ProcessImageDim)
InputKey := 'input'
get_dict_tuple (ProcessImageDim, InputKey, ProcessImageDim)
ProcessImageWidth := ProcessImageDim[0]
ProcessImageHeight := ProcessImageDim[1]
* scale to input size
zoom_image_size (ImageClipped, ImagePreprocessed, ProcessImageWidth, ProcessImageHeight, 'bilinear')
* prepare input
create_dict (DLSample)
set_dict_object (ImagePreprocessed, DLSample, InputKey)
* compute
apply_dl_model (DLModelHandle, DLSample, [], DLResult)
* get result (will be multi-channel image if type is 'generic')
get_dict_object (ResultObject, DLResult, OutputNodeName)
count_channels (ResultObject, ResultLength)
tuple_gen_const (ResultLength, 0, Confidence)
for Index := 1 to ResultLength by 1
access_channel (ResultObject, Channel, Index)
get_grayval (Channel, 0, 0, ChannelValue)
Confidence[Index-1] := ChannelValue
endfor
* get class name
tuple_sort_index (Confidence, Indices)
tuple_inverse (Indices, Indices)
Class := ClassNames[Indices[0]]
* display result
dev_clear_window ()
dev_display (Image)
dev_get_window (WindowHandle1)
set_tposition (WindowHandle1, 10, 100)
tuple_string (Confidence[Indices[0]], '.2f', ConfidenceString)
write_string (WindowHandle1, Class+' '+ConfidenceString)