设置首页收藏本站
开启左侧

halcon算子報錯1301,但是索引是1的時候能過

[复制链接]
del长安 发表于 2023-10-17 14:07:39 | 显示全部楼层 |阅读模式
這是因爲什麽,在索引是1的時候能運行,但是索引變成2以後報錯1301,求大佬指引
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
 楼主| del长安 发表于 2023-10-17 14:09:48 | 显示全部楼层
  1. *********************************************************************************************************

  2. *相機獲取圖片
  3. *open_framegrabber ('USB3Vision', 0, 0, 0, 0, 0, 0, 'progressive', -1, 'default', -1, 'false', 'default', '2BDF59167987_Hikrobot_MVCE12010UM', 0, -1, AcqHandle)
  4. *grab_image_start (AcqHandle, -1)
  5. *grab_image_async (Image, AcqHandle, -1)
  6. *讀取固定圖片
  7. read_image(Image, 'D:/DLtest/testImages/OK/MSIK_0823_165614.bmp')
  8. get_image_size(Image, Width, Height)
  9. dev_open_window(0, 0, Width/4, Height/4, 'black', WindowHandle)
  10. dev_display(Image)
  11. **************************************************
  12. *讀取訓練模型
  13. *理論基礎模型的成功率只有89%,但是實際上239張圖片有10個是錯誤判定,成功率高達96%
  14. *實際成功率比理論高,這個模型是否可以使用
  15. read_dl_model('C:/Users/yifanzhao/Desktop/螺絲訓練/108.hdl',DLModelHandle)
  16. *設置硬件參數
  17. query_available_dl_devices (['runtime', 'runtime', 'id'], ['gpu', 'cpu', 0], DLDeviceHandle)
  18. set_dl_model_param (DLModelHandle, 'device', DLDeviceHandle[0])
  19. *設置預處理參數
  20. create_dl_preprocess_param_from_model (DLModelHandle, 'none', 'full_domain', [], [], [], DLPreprocessParam)
  21. *獲取模型參數
  22. get_dl_model_param (DLModelHandle, 'meta_data', MetaData)
  23. *異常值分類閾值
  24. InferenceClassificationThreshold := number(MetaData.anomaly_classification_threshold)
  25. *閾值下限
  26. InferenceSegmentationThreshold := number(MetaData.anomaly_segmentation_threshold)
  27. *分類字典
  28. DLDatasetInfo := dict{class_names: ['OK', 'NG'], class_ids: [0, 1]}
  29. *窗體字典
  30. WindowDict := dict{}
  31. **************************************************
  32. *排綫
  33. * read_dl_model('C:/Users/yifanzhao/Desktop/螺絲訓練/排綫模型.hdl',DLModelHandlePX)
  34. * query_available_dl_devices(['runtime', 'runtime', 'id'], ['gpu', 'cpu', 0], DLDeviceHandles)
  35. * set_dl_model_param(DLModelHandlePX, 'device', DLModelHandlePX[0])
  36. * create_dl_preprocess_param_from_model(DLModelHandlePX, 'none', 'full_domain', [], [], [], DLPreprocessParamPX)
  37. * get_dl_model_param(DLModelHandlePX, 'meta_data', MetaDataPX)
  38. * InferenceClassificationThreshold:=number(MetaDataPX.anomaly_classification_threshold)
  39. * InferenceSegmentationThreshold := number(MetaDataPX.anomaly_segmentation_threshold)
  40. * WindowDict:=dict{}
  41. * PXOK:=0
  42. * PXNG:=0
  43. **************************************************
  44. *電腦選取
  45. draw_rectangle2(WindowHandle, ComputerRow, ComputerColumn, ComputerPhi, ComputerLength1, ComputerLength2)
  46. gen_rectangle2(ComputerRectangle, ComputerRow, ComputerColumn, ComputerPhi, ComputerLength1, ComputerLength2)
  47. reduce_domain(Image, ComputerRectangle, ImageComputer)
  48. create_shape_model(ImageComputer, 'auto', 0, rad(360), 'auto', 'auto', 'use_polarity', 'auto', 'auto', ModelID)
  49. *標志選取
  50. draw_rectangle2(WindowHandle, SignRow, SignColumn, SignPhi, SignLength1, SignLength2)
  51. gen_rectangle2(SignRectangle, SignRow, SignColumn, SignPhi, SignLength1, SignLength2)
  52. reduce_domain(Image, SignRectangle, ImageSign)
  53. inspect_shape_model(ImageSign, ModelImages, ModelRegions, 4, 30)
  54. create_shape_model(ImageSign, 'auto', 0, rad(360), 'auto', 'auto', 'use_polarity', 'auto', 'auto', ModelID1)
  55. get_shape_model_contours(ModelContours, ModelID1, 1)
  56. area_center(SignRectangle, Area, Row, Column)
  57. *roi選取
  58. gen_empty_obj(RegionRoi)
  59. for Index := 1 to 30 by 1
  60.     draw_circle(WindowHandle, circleRow, circleColumn, Radius)
  61.     gen_circle(Circle, circleRow, circleColumn, 23)
  62.     concat_obj(RegionRoi, Circle, RegionRoi)
  63. endfor
  64. *排綫選取
  65. * gen_empty_obj(PXRoi)
  66. * for IndexPX := 1 to 2 by 1
  67. *     draw_rectangle2(WindowHandle, Row3, Column3, Phi, Length1, Length2)
  68. *     gen_rectangle2(Rectangle, Row3, Column3, Phi, Length1, Length2)
  69. *     concat_obj(PXRoi, Rectangle, PXRoi)
  70. * endfor
  71. *OK與NG標志
  72. resultOK:=0
  73. resultNG:=0
  74. *獲取時間
  75. get_system_time (MSecond, Second, Minute, Hour, Day, YDay, Month, Year)
  76.             tuple_string(Month, '.2d', Month_String)
  77.             tuple_string(Day, '.2d', Day_String)
  78.             tuple_string(Hour, '.2d', Hour_String)
  79.             tuple_string(Minute, '.2d', Minute_String)
  80.             tuple_string(Second, '.2d', Second_String)
  81.             name := 'MSIK_'+Month_String + Day_String + '_'+ Hour_String + Minute_String + Second_String+'.bmp'
  82. *循環驗證
  83. *循環驗證所有螺絲,將每一個位置的螺絲截取為圖片,然後與模型進行對比
  84. *但是DLResult中的數據提取不出來,提取出來就可進行對比。
  85. *是否可以直接將數據拿出或者只是調動數據進行對比。
  86. list_files ('D:/DLtest/testImages/OK', ['files','follow_links'], ImageFiles)
  87. tuple_regexp_select (ImageFiles, ['\\.(tif|tiff|gif|bmp|jpg|jpeg|jp2|png|pcx|pgm|ppm|pbm|xwd|ima|hobj)$','ignore_case'], ImageFiles)
  88. for IndexInference := 0 to |ImageFiles| - 1 by 1
  89.     read_image (TestImage, ImageFiles[IndexInference])
  90.     *相機獲取圖片
  91.     *grab_image(TestImage, AcqHandle)
  92.     *讀取固定圖片
  93.     *read_image(TestImage, 'D:/DLtest/testImages/OK/MSIK_0823_165614.bmp')
  94.     *尋找電腦
  95.     find_shape_model(TestImage, ModelID, 0, rad(360), 0.3, 1, 0.5, 'least_squares', 0, 0.9, Row1, Column1, Angle, ComputerScore)
  96.     if(|ComputerScore|>0)
  97.         *尋找標志物
  98.         find_shape_model(TestImage, ModelID1, 0, rad(360), 0.5, 1, 0.5, 'least_squares', 0, 0.9, Row2, Column2, Angle1, SignScore)
  99.         if(|SignScore|>0)
  100.             *仿射變換匹配標志物位置
  101.             vector_angle_to_rigid(0,0,0, Row2, Column2, Angle1, SignHomMat2D)
  102.             affine_trans_contour_xld(ModelContours, ContoursAffineTrans, SignHomMat2D)
  103.             *仿射變換匹配螺絲ROI位置
  104.             vector_angle_to_rigid(Row, Column, 0, Row2, Column2, Angle1, RoiHomMat2D)
  105.             affine_trans_region(Circle, RegionAffineTrans, RoiHomMat2D, 'nearest_neighbor')
  106.             *仿射變換匹配排綫位置
  107.             *vector_angle_to_rigid(0,0,0, Row2, Column2, Angle1, PXHomMat2D)
  108.             *affine_trans_region(PXRoi, RegionAffineTransPX, PXHomMat2D, 'nearest_neighbor')
  109.         endif
  110.         
  111.         dev_display(TestImage)
  112.         *dev_close_window()
  113.         *循環檢測
  114.         *排綫
  115.         *for PXIndex := 1 to 2 by 1
  116.          *   select_obj(PXRoi, ObjectSelectedPX, PXIndex)
  117.          *   reduce_domain(TestImage, ObjectSelectedPX, CheckImage)
  118.             
  119.         *endfor
  120.         *螺絲
  121.         gen_empty_obj(ErrRegion)
  122.         for TIndex := 1 to 30 by 1
  123.             *搜索螺絲集合的螺絲圖片
  124.             select_obj(RegionAffineTrans, ObjectSelected, TIndex)
  125.             reduce_domain(TestImage, ObjectSelected, CheckImage)
  126.             crop_domain(CheckImage, ImagePart)
  127.             *dev_clear_window()
  128.             *dev_display(CheckImage)
  129.             *圖片與模型檢測
  130.             gen_dl_samples_from_images (ImagePart, DLSample)
  131.             preprocess_dl_samples (DLSample, DLPreprocessParam)
  132.             *分類檢測
  133.             apply_dl_model (DLModelHandle, DLSample, [], DLResult)
  134.             *判斷閾值
  135.             threshold_dl_anomaly_results (InferenceSegmentationThreshold, InferenceClassificationThreshold, DLResult)
  136.             *顯示結果
  137.             *判斷結果並統計,查看DLResult具體的值并進行分類*********************
  138.             dev_display_dl_data (DLSample, DLResult, DLDatasetInfo, ['anomaly_result', 'anomaly_image'], [], WindowDict)
  139.             get_dict_param(DLResult, 'keys', [], GenParamValue)
  140.             get_dict_tuple(DLResult, 'anomaly_class_id', Tuple)
  141.             if(Tuple=0)
  142.                 resultOK:=resultOK+1
  143.             else
  144.                 resultNG:=resultNG+1
  145.                 concat_obj(ErrRegion, ImagePart, ErrRegion)
  146.             endif
  147.             dev_disp_text ('Press F5 (continue)', 'window', 'bottom', 'center', 'black', [], [])
  148.             *stop()
  149.             
  150.         endfor
  151. *         dev_display(TestImage)
  152. *         dev_set_color('green')
  153. *         if(resultNG>1)
  154. *             dev_set_color('red')
  155. *             dev_display(ErrRegion)
  156. *             set_display_font (WindowHandle, 30, 'mono', 'true', 'true')
  157. *             disp_message (WindowHandle, 'NG', 'window', 12, 12, 'red', 'false')
  158. *             wait_seconds(1)
  159. *         else
  160. *             set_display_font (WindowHandle, 30, 'mono', 'true', 'true')
  161. *             disp_message (WindowHandle, 'OK', 'window', 12, 12, 'green', 'false')
  162. *             wait_seconds(1)
  163. *         endif
  164.         stop()
  165.     endif
  166. endfor
  167. * while(true)
  168.    
  169. * endwhile
复制代码
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
 楼主| del长安 发表于 2023-10-17 14:11:10 | 显示全部楼层
del长安 发表于 2023-10-17 14:09
*************************************************************************************************** ...

這是代碼,125行的地方在索引為1的時候可以通過,但是索引為2的時候報錯1301了,有沒有大佬解釋一下
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
Criss 发表于 2023-10-17 14:13:01 | 显示全部楼层
可以统计下RegionAffineTrans这个数量是否存在30个(还是一整个),图形数组的索引从1开始到总数目。
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表