一、條形碼
函數介紹
create_bar_code_model
* 1.創建條碼讀取器的模板
* 參數一:通用參數的名稱,針對條形碼模型進行調整。默認值為空
* 參數二:針對條形碼模型進行調整
* 參數三:條形碼模型的句柄。
create_bar_code_model ([], [], BarCodeHandle)
?set_bar_code_param
* 參數一:條形碼模型的句柄。
* 參數二:通用參數的名稱,針對查找和解碼條形碼進行了調整
* 參數三:通用參數的值
set_bar_code_param (BarCodeHandle, 'stop_after_result_num', 1)
find_bar_code
* 3.在圖像中讀取條碼數據和數據區域
* 參數一:要查找的圖片
* 參數二:條碼數據區域
* 參數三:條碼模板句柄
* 參數四:條碼類型
* 參數五:讀取結果
find_bar_code (ImageReduced2, SymbolRegions, BarCodeHandle, 'auto', DecodedDataStrings)
效果?
?代碼
* 1.創建條碼讀取器的模板
* 參數一:通用參數的名稱,針對條形碼模型進行調整。默認值為空
* 參數二:針對條形碼模型進行調整
* 參數三:條形碼模型的句柄。
create_bar_code_model ([], [], BarCodeHandle)dev_set_color ('green')
dev_set_draw ('margin')* 2.配置解碼方式
* 參數一:條形碼模型的句柄。
* 參數二:通用參數的名稱,針對查找和解碼條形碼進行了調整
* 參數三:通用參數的值
set_bar_code_param (BarCodeHandle, 'stop_after_result_num', 1)
read_image (Image, 'D:/workplace/字符識別/Image_20250114144355733.bmp')
gen_rectangle2 (ROI_0, 2704.8, 2530.15, rad(0.89529), 882.925, 59.4154)
reduce_domain (Image, ROI_0, ImageReduced2)* 用于將顯示窗口的大小調整到適合圖像大小的尺寸。
dev_resize_window_fit_image (ImageReduced2, 0, 0, -1, -1)* 3.在圖像中讀取條碼數據和數據區域
* 參數一:要查找的圖片
* 參數二:條碼數據區域
* 參數三:條碼模板句柄
* 參數四:條碼類型
* 參數五:讀取結果
find_bar_code (ImageReduced2, SymbolRegions, BarCodeHandle, 'auto', DecodedDataStrings)
area_center (SymbolRegions, Area, Row, Column)dev_close_window ()
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
set_display_font (WindowHandle, 16, 'mono', 'true', 'false')
dev_display (Image)
dev_display (SymbolRegions)
disp_message (WindowHandle, DecodedDataStrings, 'image', Row+200, Column-500, 'black', 'true')
二、二維碼
函數介紹:
create_data_code_2d_model
*創建二維碼模型* 創建二維碼模型* 參數一:二維碼類型* 參數二:通用參數的名稱 針對二維數據代碼模型進行了調整。* 參數三:針對二維數據代碼模型進行了調整。* 參數四:數據代碼模型的句柄。create_data_code_2d_model (_codeMode[Index1], 'default_parameters', 'maximum_recognition', DataCodeHandle)
?find_data_code_2d
*檢測二維碼,最多可以檢測到10個* 查找圖形中二維碼,并獲取信息* 參數一:圖片* 參數二:圍繞成功解碼數據的 XLD 輪廓 代碼符號。* 參數三:二維碼模型的句柄。* 參數四:參數的名稱 控制操作員的行為。* 參數五:可選泛型參數的值。* 參數六:所有成功解碼的二維數據代碼的句柄 符號。* 參數七:所有檢測到的二維數據代碼的解碼數據字符串 圖像中的符號。find_data_code_2d (ImageEmphasize, SymbolXLDs, DataCodeHandle, 'stop_after_result_num', 10, ResultHandles, \DecodedDataStrings)
效果1:?
效果2
代碼
* 二維碼讀取
read_image (Image, 'C:/Users/Albert/Desktop/qr/2.bmp')
dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)
set_display_font (WindowHandle, 16, 'mono', 'true', 'false')
*創建二維碼類型列表
_codeMode:=['Aztec Code', 'Data Matrix ECC 200', 'GS1 Aztec Code', 'GS1 DataMatrix', \'GS1 QR Code', 'Micro QR Code', 'PDF417', 'QR Code']
*圖像放大1.5倍
zoom_image_factor (Image, ImageZoomed, 1.5, 1.5, 'constant')
*圖像銳化
emphasize (ImageZoomed, ImageEmphasize, 20, 20, 1)
*遍歷二維碼類型列表
for Index1 := 0 to |_codeMode| by 1*創建二維碼模型* 創建二維碼模型* 參數一:二維碼類型* 參數二:通用參數的名稱 針對二維數據代碼模型進行了調整。* 參數三:針對二維數據代碼模型進行了調整。* 參數四:數據代碼模型的句柄。create_data_code_2d_model (_codeMode[Index1], 'default_parameters', 'maximum_recognition', DataCodeHandle)*設置超時500msset_data_code_2d_param (DataCodeHandle, 'timeout', 500)*檢測二維碼,最多可以檢測到10個* 查找圖形中二維碼,并獲取信息* 參數一:圖片* 參數二:圍繞成功解碼數據的 XLD 輪廓 代碼符號。* 參數三:二維碼模型的句柄。* 參數四:參數的名稱 控制操作員的行為。* 參數五:可選泛型參數的值。* 參數六:所有成功解碼的二維數據代碼的句柄 符號。* 參數七:所有檢測到的二維數據代碼的解碼數據字符串 圖像中的符號。find_data_code_2d (ImageEmphasize, SymbolXLDs, DataCodeHandle, 'stop_after_result_num', 10, ResultHandles, \DecodedDataStrings)*獲取當前圖像的二維碼類型code_type := _codeMode[Index1]*如果檢測到圖像有二維碼,就顯示在窗體上if (|DecodedDataStrings| > 0)disp_message (WindowHandle, code_type+':'+DecodedDataStrings, 'window', 12, 12, 'black', 'true')endif
endfordev_clear_window ()
三、csharpopencv 識別二維碼
?
C#中生成二維碼(QR碼)與讀取二維碼內容_c#將字符串生成二維碼圖片-CSDN博客
實用主義,完全是按照上面這位老哥抄的
?
gitee如下:?
OCRQR: 有百度的飛漿 C# opencv、以及其他開源軟件的集合
四、全部代碼
* 1.創建條碼讀取器的模板
* 參數一:通用參數的名稱,針對條形碼模型進行調整。默認值為空
* 參數二:針對條形碼模型進行調整
* 參數三:條形碼模型的句柄。
create_bar_code_model ([], [], BarCodeHandle)dev_set_color ('green')
dev_set_draw ('margin')* 2.配置解碼方式
* 參數一:條形碼模型的句柄。
* 參數二:通用參數的名稱,針對查找和解碼條形碼進行了調整
* 參數三:通用參數的值
set_bar_code_param (BarCodeHandle, 'stop_after_result_num', 1)
read_image (Image, 'D:/workplace/字符識別/Image_20250114144355733.bmp')
gen_rectangle2 (ROI_0, 2704.8, 2530.15, rad(0.89529), 882.925, 59.4154)
reduce_domain (Image, ROI_0, ImageReduced2)* 用于將顯示窗口的大小調整到適合圖像大小的尺寸。
dev_resize_window_fit_image (ImageReduced2, 0, 0, -1, -1)* 3.在圖像中讀取條碼數據和數據區域
* 參數一:要查找的圖片
* 參數二:條碼數據區域
* 參數三:條碼模板句柄
* 參數四:條碼類型
* 參數五:讀取結果
find_bar_code (ImageReduced2, SymbolRegions, BarCodeHandle, 'auto', DecodedDataStrings)
area_center (SymbolRegions, Area, Row, Column)dev_close_window ()
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
set_display_font (WindowHandle, 16, 'mono', 'true', 'false')
dev_display (Image)
dev_display (SymbolRegions)
disp_message (WindowHandle, DecodedDataStrings, 'image', Row+200, Column-500, 'black', 'true')* 4.使用完畢,刪除條碼匹配模板read_image (Image1111, 'D:/workplace/字符識別/1111.jpg')
rgb1_to_gray (Image1111, GrayImage)
gen_rectangle1 (ROI_0, 76.0361, 119.731, 257.755, 779.377)
reduce_domain (GrayImage, ROI_0, ImageReduced)
threshold (ImageReduced, Region, 0, 155)
connection (Region, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, ['area','contlength'], 'and', [490.84,114.53], [50000,2051.7])
sort_region (SelectedRegions, SortedRegions, 'first_point', 'true', 'row')
read_ocr_class_mlp ('Document_0-9A-Z_NoRej.omc', OCRHandle)
do_ocr_multi_class_mlp (SortedRegions, ImageReduced, OCRHandle, Class, Confidence)*漢字識別
read_image (Image22, 'D:/workplace/字符識別/22.png')
rgb1_to_gray (Image22, GrayImage1)
gen_rectangle1 (ROI_0, 21.3781, 182.366, 148.383, 1159.65)
reduce_domain (GrayImage1, ROI_0, ImageReduced1)
threshold (ImageReduced1, Region1, 128, 255)
closing_circle (Region1, RegionClosing, 3.5)
connection (RegionClosing, ConnectedRegions1)
select_shape (ConnectedRegions1, SelectedRegions1, 'area', 'and', 150, 99999)
sort_region (SelectedRegions1, SortedRegions1, 'first_point', 'true', 'column')
dev_display (ImageReduced1)
words:=['國','外','電','子','與','通','信','教','材','系','列']
for Index := 1 to |words| by 1* 按順序拿到單個字符select_obj (SortedRegions1, obj, Index)append_ocr_trainf (obj, ImageReduced1, words[Index-1], 'D:/workplace/字符識別/trainChinese.trf')
endfor*讀取訓練文件
read_ocr_trainf_names ('D:/workplace/字符識別/trainChinese.trf', CharacterNames, CharacterCount)
*創建模型
create_ocr_class_mlp (8, 10, 'constant', 'default', CharacterNames, 80, 'none', 10, 42, OCRHandle1)* 訓練模型
trainf_ocr_class_mlp (OCRHandle1, 'D:/workplace/字符識別/trainChinese.trf', 200, 1, 0.01, Error, ErrorLog)*識別:
do_ocr_multi_class_mlp (SortedRegions1, ImageReduced1, OCRHandle1, Class1, Confidence1)* 二維碼讀取
read_image (Image, 'C:/Users/Albert/Desktop/qr/1.jpg')
dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)
set_display_font (WindowHandle, 16, 'mono', 'true', 'false')
*創建二維碼類型列表
_codeMode:=['Aztec Code', 'Data Matrix ECC 200', 'GS1 Aztec Code', 'GS1 DataMatrix', \'GS1 QR Code', 'Micro QR Code', 'PDF417', 'QR Code']
*圖像放大1.5倍
zoom_image_factor (Image, ImageZoomed, 1.5, 1.5, 'constant')
*圖像銳化
emphasize (ImageZoomed, ImageEmphasize, 20, 20, 1)
*遍歷二維碼類型列表
for Index1 := 0 to |_codeMode| by 1*創建二維碼模型* 創建二維碼模型* 參數一:二維碼類型* 參數二:通用參數的名稱 針對二維數據代碼模型進行了調整。* 參數三:針對二維數據代碼模型進行了調整。* 參數四:數據代碼模型的句柄。create_data_code_2d_model (_codeMode[Index1], 'default_parameters', 'maximum_recognition', DataCodeHandle)*設置超時500msset_data_code_2d_param (DataCodeHandle, 'timeout', 500)*檢測二維碼,最多可以檢測到10個* 查找圖形中二維碼,并獲取信息* 參數一:圖片* 參數二:圍繞成功解碼數據的 XLD 輪廓 代碼符號。* 參數三:二維碼模型的句柄。* 參數四:參數的名稱 控制操作員的行為。* 參數五:可選泛型參數的值。* 參數六:所有成功解碼的二維數據代碼的句柄 符號。* 參數七:所有檢測到的二維數據代碼的解碼數據字符串 圖像中的符號。find_data_code_2d (ImageEmphasize, SymbolXLDs, DataCodeHandle, 'stop_after_result_num', 10, ResultHandles, \DecodedDataStrings)*獲取當前圖像的二維碼類型code_type := _codeMode[Index1]*如果檢測到圖像有二維碼,就顯示在窗體上if (|DecodedDataStrings| > 0)disp_message (WindowHandle, code_type+':'+DecodedDataStrings, 'window', 12, 12, 'black', 'true')endif
endfordev_clear_window ()
stop ()* 1 讀取條形碼* 創建一個條形碼處理模型,這里使用默認參數。
create_bar_code_model([], [], BarCodeHandle)
* 設置參數,使得在找到第一個條形碼后停止搜索,因為我們期望每張圖像中只有一個條形碼。
set_bar_code_param(BarCodeHandle, 'stop_after_result_num', 1)
* 減少最小代碼長度到1個字符,因為有些2/5工業條形碼可能只有一個數字。
* 注意:在實際應用中不推薦這樣做,因為它可能會導致更多的誤讀。
set_bar_code_param_specific(BarCodeHandle, '2/5 Industrial', 'min_code_length', 1)
* 關閉任何已打開的窗口,以確保新窗口可以被正確創建。
dev_close_window()
* 打開一個新的圖形窗口,用于顯示處理結果。
* 參數分別是:窗口的左上角坐標 (0, 0),寬度 (120),高度 (300),背景顏色 ('black'),以及返回的窗口句柄 (WindowHandle)。
dev_open_window(0, 0, 120, 300, 'black', WindowHandle)
* 設置顯示字體大小為14,字體類型為等寬字體 ('mono'),加粗 ('true'),斜體 ('false')。
set_display_font(WindowHandle, 14, 'mono', 'true', 'false')
* 設置繪圖模式為邊距 ('margin'),這意味著繪制的元素將與窗口邊緣保持一定的距離。
dev_set_draw('margin')
* 設置線條寬度為3,這將影響繪制的線條或形狀的粗細。
dev_set_line_width(3)
* 開始循環,迭代4次,每次處理一張不同的條形碼圖像。
for I := 1 to 4 by 1* 構造圖像文件路徑并讀取圖像,這里的I是一個變量,代表當前迭代的次數。* 文件名格式為'barcode/25industrial/25industrial0' + I,例如,第一次迭代時會讀取'25industrial01'。read_image(Image, 'barcode/25industrial/25industrial0' + I)* 獲取圖像的尺寸,以便正確設置顯示窗口的范圍。get_image_size(Image, Width, Height)* 設置窗口的顯示區域,使圖像完整地填充窗口。dev_set_window_extents(0, 0, Width - 1, Height - 1)* 在窗口中顯示圖像。dev_display(Image)* 設置繪制顏色為綠色。dev_set_color('green')* 配置為不考慮校驗字符進行條形碼讀取。set_bar_code_param(BarCodeHandle, 'check_char', 'absent')* 嘗試找到并解碼條形碼,返回解碼后的字符串。find_bar_code(Image, SymbolRegions, BarCodeHandle, '2/5 Industrial', DecodedDataStrings)* 顯示解碼后的字符串。disp_message(WindowHandle, DecodedDataStrings, 'window', 12, 12, 'black', 'false')* 計算解碼字符串的最后一個字符的位置。LastChar := strlen(DecodedDataStrings) - 1* 顯示最后一個字符,假設這是校驗字符,并用森林綠顏色標記。disp_message(WindowHandle, sum(gen_tuple_const(LastChar,' ')) + DecodedDataStrings{LastChar}, 'window', 12, 12, 'forest green', 'false')* 暫停程序執行,讓用戶有時間查看結果。stop()* 現在配置為使用校驗字符驗證結果。set_bar_code_param(BarCodeHandle, 'check_char', 'present')* 再次嘗試找到并解碼條形碼,這次包括校驗字符的驗證。* 如果校驗字符不正確,條形碼讀取將會失敗。find_bar_code(Image, SymbolRegions, BarCodeHandle, '2/5 Industrial', DecodedDataStrings)* 顯示解碼后的字符串(不包括校驗字符)。disp_message(WindowHandle, DecodedDataStrings, 'window', 36, 12, 'black', 'false')* 改變繪制顏色為洋紅色。dev_set_color('magenta')* 如果不是最后一張圖片,則暫停,等待用戶繼續。if (I < 4)stop()endif
endfor