19:常見的Halcon數據格式

遍歷文件夾與文件選擇

1)遍歷文件夾:

list_files( : : Directory, Options : Files)

Directory:目錄(文件夾路徑)

Options:選項

'files'

指定搜索的格式為文件

'directories'

指定搜索的格式為文件夾

'recursive'

指定可以遍歷子文件夾下的文件

'follow_links'

'max_depth 5'

指定遍歷的深度

'max_files 1000'

指定遍歷的最大文件數目

Files:文件(文件的路徑)

2)文件格式篩選

tuple_regexp_select( : : Data, Expression : Selection)

Data:被選擇的文件路徑數組

Expression:文件格式的篩選規則

//.

轉義????????? .

(bmp|JPG)

篩選的文件格式

'ignore_case'

忽略大小寫

Selection:選擇出的文件路徑數組

?

示例:

???1:?* 遍歷文件夾D:/資料庫/Downloads

???2:?list_files ('D:/資料庫/Downloads', ['files','follow_links'], ImageFiles)

???3:?

???4:?* 篩選bmp或jpg格式的文件

???5:?tuple_regexp_select (ImageFiles, ['\\.(bmp|jpg)$','ignore_case'], ImageFiles)

???6:?

???7:?* 依次讀取圖片

???8:?for?Index := 0 to?|ImageFiles| - 1 by?1

???9:?????read_image (Image, ImageFiles[Index])

??10:?????

??11:?endfor

(一)Halcon的語法結構特點

類似于Pascal 與 Visual Basic,大部分的語句是Halcon提供的算子,此外也包含了少部分的控制語句;

不允許單獨聲明變量;

提供自動的內存管理(初始化、析構及OverWrite),但句柄則需要顯示釋放;

C++(算子模式)

通過代碼導出,以C++為例,默認導出為算子型的語法結構,而非面向對象的;在此模式下,全部函數聲明為全局類型,數據類型只需要用Hobject、HTuple兩類類型進行聲明;

C++(面向對象)

可以以面向對象的方式重寫代碼,也即利用類及類的成員函數;

在這種模式下,控制變量的類型仍未HTuple,而圖形數據可以由多種類型,如HImage等;

其他語言(略)

HImage 可以查看halcon中類相關的內容

(二)Halcon的數據類型

兩類參數:

1、圖形參數Iconic?(image, region, XLD)

2、與控制參數Control?(string, integer, real, handle),

在Halcon算子的參數中,依次為:輸入圖形參數、輸出圖形參數、輸入控制參數、輸出控制參數;并且其輸入參數不會被算子改變。

1、圖形參數Iconic:

(1)Images

在Halcon中,Image = Channel + Domain , 像素點存放在Channel矩陣中,根據ROI來描述Image。

Image相關操作:

輸入:從文件、從設備

生成:外部圖像數據、空內存區域;

顯示:disp_image()圖像首通道灰度圖;disp_color() 彩色圖;disp_channel()某特定通道;disp_obj() 自動判別類別;

縮放:set_part() 設置顯示區域;set_part_style() 設置顯示參數;

說明:

? Multiple channels //多通道圖像,可以是灰度圖像或RGB圖像

? Arbitrary region of interest //ROI區域圖像

? Multiple pixel types(byte, (u)int1/2/4,real, complex, direction, cyclic, vector_field)

byte, uint2 //灰度圖像的標準編碼

int1, int2 //Difference of two images or derivates with integer precision(??)int4 //兩幅灰度圖的頻譜

direction //圖片邊緣的梯度方向

real //邊緣提取及特定灰度值的輪廓

complex //圖片頻率分布

cyclic //Assigning one "gray" value to each color(??)

vector_field //連續圖形的光學流分布

(2)Regions

以行列坐標形式儲存,有廣泛的應用,特點是高效,可利用同態算子。比如用閾值對圖像分割的結果,其他系統中稱為BOLB,AREA等。

(3)Extended?Line?Description (XLD)

圖像均用像素點保存,而像素點是整型的,不連續的,Halcon做了拓展,定義了亞像素(subpixel)的描述幾何輪廓的對象:xld,主要用在亞像素測量的背景下,可用于如提取邊緣、構建輪廓等等,xld在模板匹配、圖形校準等多方面有重要的用途。

說明:

Subpixel accurate line and edge detection(亞像素精度的線和邊緣檢測)

Generic point list based data structure(依據數據結構產生點的表)

Handling of contours, polygons, lines, parallels, etc.(對輪廓,多邊形,線等進行操作)

2、控制參數Control:

String類型變量由單引號’括起來;此外還有一些特殊字符;

Boolean型變量包括 true ( = 1 )、 false ( = 0 ) ;不為零的整數將被認為true;但絕大多數的Halcon函數接受字符串型的表達:’true’‘false’,而非邏輯型表達;

此外,Halcon支持的類型還包括圖形元組、控制變量元組及句柄:

元組的概念,使得可以用一個變量傳遞數個對象,可以由重載后的函數來進行處理;圖形元組的下標從1開始,控制變量元組下標從0開始;句柄則可以用來描述窗體、文件等等,句柄不能是常量。

(三)Halcon的基本語句

1、標準賦值

? assign(Input, Result)???? //編輯形式,永遠都是輸入在前,輸出在后

???1:?assign(sin(x) + cos(y), u)

? Result := Input????????????? //代碼形式

???1:?u := sin(x) + cos(y) ???//與之前的assign(sin(x) + cos(y), u)是等價的

2、元組插入賦值

? insert(Tuple, NewValue, Index, Tuple)???? //編輯形式

???1:?Tuple := [1,2,3,4,5,6,7,8,9]

???2:?insert(Tuple,0,3,Tuple)

顯示結果為:[1, 2, 3,0, 5, 6, 7, 8, 9]

? Tuple[Index] := NewValue???????????????????????? //代碼形式

???1:?Tuple := [1,2,3,4,5,6,7,8,9]

???2:?Tuple[3]:=0

顯示結果為:[1, 2, 3,0, 5, 6, 7, 8, 9]

例程:

???1:?read_image (Mreut, 'mreut') ??????????????//讀入圖像

???2:?threshold (Mreut, Region, 190, 255) ?????//閾值化,輸出閾值在190-255的Regions

???3:?Areas := [] ?????????????????????????????//定義數組Areas

???4:?for?Radius := 1 to 50 by 1 ??????????????//循環

???5:?dilation_circle (Region, RegionDilation, Radius) //利用半徑為Radius的圓對Region進行膨脹運算,輸出

???6:????????????????????????????????????????????????????//RegionDilation,輸出形式仍然為Region。

???7:?area_center (RegionDilation, Area, Row, Column) //輸出區域的面積和中心像素坐標

???8:?Areas[Radius-1] := Area ???????????????????????//對數組Areas的第Radius-1個元素進行賦值

???9:?endfor

3、基本數組操作極其對應的算子

數組操作

說明

對應的算子

t := [t1,t2]

t1,t2連接成新的數組

tuple_concat

i := |t|

得到數組長度

tuple_length

v := t[i]

選取第i個元素0<= i < |t|

tuple_select

t := t[i1:i2]

選取i1到i2的元素

tuple_select_range

t := subset(t,i)

選取數組t中的第i個元素

tuple_select

t := remove(t,i)

去除數組t中的第i個元素

tuple_remove

i := find(t1,t2)

找到t2數組在t1數組中出現位置索引(or -1 if no match)

tuple_find

t := uniq(t)

在t數組中把連續相同的值只保留一個

tuple_uniq

4、創建數組

(1)gen_tuple_const函數

???1:?tuple_old := gen_tuple_const(100,666) //創建一個具有100個元素的,每個元素都為666的數組

???2:?tuple_new := gen_tuple_const(|tuple_old|,4711) //創建一個和原來數據長度一樣的,每個元素為4711的數組

上面的函數也可以通過如下表達式實現:tuple_new := (tuple_old * 0) + 4711

(2)當數組中的元素不同時,需要用循環語句對數組中的每一個元素賦值

例如:

???1:?tuple := [] ?//創建空數組

???2:?for?i := 1 to 100 by 1 ?//建立步長為1的循環

???3:?tuple := [tuple,i*i] ?//將i方的值賦給數組的第i個元素

???4:?endfor ?//循環結束


算術運算

? a / a division

? a % a rest of the integer division

? a * a multiplication

? v + v addition and concatenation of strings

? a - a subtraction

? -a negation

位運算

? lsh(i,i)???????????? left shift

? rsh(i,i)??????????? right shift

? i band i????????? bit-wise and

? i bor i???????????? bit-wise or

? i bxor i?????????? bit-wise xor

? bnot i???????????? bit-wise complement

字符串操作

? v$s?????????????????????? conversion to string //字符串的格式化,有很豐富的參數

? v + v??????????????????? concatenation of strings and addition

? strchr(s,s)?????????? search character in string

? strstr(s,s)??????????? search substring

? strrchr(s,s)???????? search character in string (reverse)

? strrstr(s,s)????????? search substring (reverse)

? strlen(s)????????????? length of string

? s{i}?????????????????????? selection of one character

? s{i:i}???????????????????? selection of substring

? split(s,s)????????????? splitting to substrings

比較操作符

? t < t?????????????? less than

? t > t?????????????? greater than

? t <= t??????????? less or equal

? t >= t??????????? greater or equal

? t = t?????????????? equal

? t # t?????????????? not equal

邏輯操作符

? lnot l???????????????????? negation

? l and l?????????????????? logical ’and’

? l or l????????????????????? logical ’or’

? l xor l??????????????????? logical ’xor’

數學函數

? sin(a)??????????????????????? sine of a

? cos(a)?????????????????????? cosine of a

? tan(a)?????????????????????? tangent of a

? asin(a)????????????????????? arc sine of a in the interval [-p/2, p/ 2], a ? [-1, 1]

? acos(a)???????????????????? arc cosine a in the interval [-p/2, p/2], a ? [-1, 1]

? atan(a)???????????????????? arc tangent a in the interval [-p/2, p/2], a ? [-1, 1]

? atan2(a,b)?????????????? arc tangent a/b in the interval [-p, p]

? sinh(a)????????????????????? hyperbolic sine of a

? cosh(a)???????????????????? hyperbolic cosine of a

? tanh(a)???????????????????? hyperbolic tangent of a

? exp(a)????????????????????? exponential function

? log(a)?????????????????????? natural logarithm, a> 0

? log10(a)????????????????? decade logarithm, a> 0

? pow(a1,a2)???????????? power

? ldexp(a1,a2)????????? a1 pow(2,a2)

其他操作(統計、隨機數、符號函數等)

? min(t)???????????????????? minimum value of the tuple

? max(t)??????????????????? maximum value of the tuple

? min2(t1,t2)??????????? element-wise minimum of two tuples

? max2(t1,t2)?????????? element-wise maximum of two tuples

? find(t1,t2)????????????? indices of all occurrences of t1 within t2

? rand(i)??????????????????? create random values from 0..1 (number specified by i)

? sgn(a)???????????????????? element-wise sign of a tuple

? sum(t)??????????????????? sum of all elements or string concatenation

? cumul(t)???????????????? cumulative histogram of a tuple

? mean(a)???????????????? mean value

? deviation(a)????????? standard deviation

? sqrt(a)??????????????????? square root of a

? deg(a)??????????????????? convert radians to degrees

? rad(a)???????????????????? convert degrees to radians

? real(a)??????????????????? convert integer to real

? int(a)????????????????????? convert a real to integer

? round(a)??????????????? convert real to integer

? number(v)???????????? convert string to a number

? is_number(v)??????? test if value is a number

? abs(a)??????????????????? absolute value of a (integer or real)

? fabs(a)?????????????????? absolute value of a (always real)

? ceil(a)??????????????????? smallest integer value not smaller than a

? floor(a)????????????????? largest integer value not greater than a

? fmod(a1,a2)???????? fractional part of a1/a2, with the same sign as a1

? sort(t)?????????????????? sorting in increasing order

? uniq(t)????????????????? eliminate duplicates of neighboring values(typically used in combination with sort)

? sort_index(t)?????? return index instead of values

? median(t)??????????? Median value of a tuple (numbers)

? select_rank(t,v)? Select the element (number) with the given rank

? inverse(t)??????????? reverse the order of the values

? subset(t1,t2)????? selection from t1 by indices in t2

? remove(t1,t2)??? Remove of values with the given indices

? environment(s)? value of an environment variable

? ord(a)????????????????? ASCII number of a character

? chr(a)?????????????????? convert an ASCII number to a character

? ords(s)??????????????? ASCII number of a tuple of strings

? chrt(i)????????????????? convert a tuple of integers into a string

(四)HDevelop language(結構語句)

1) if ... endif / if ... else ... endif / if ... elseif ... else ... endif

2) for ... endfor

3) while ... endwhile

4) repeat ... until(循環體至少被執行一次,直到滿足條件時退出。等同于C語言的do...while語句)

此外,也有關鍵字 break、continue、return、exit、stop 用來控制語句的執行;

stop:終止后面的循環,點擊Step Over or Run button繼續。

exit:終止Hdevelop程序段。

(五)異常處理

異常處理:

try ... catch ... endtry:異常算子處理句柄

throw:允許處理用戶定義的意外情況。

用MFC寫的,我在捕獲異常提時候,都需要在前面使用HException::InstallHHandler(&CPPExpDefaultExceptionHandler);才能全try{..}catch(HException &except){..} 生效

在VC中其實是靠不住的。例如下面的代碼:

  1. try
  2. {
  3. BYTE?*?pch?;
  4. pch?=?(?BYTE?*?)?00001234?;?// 給予一個非法地址
  5. *?pch?=?6?;?// 對非法地址賦值,會造成Access Violation 異常
  6. }

//...是捕捉任意類型的異常.

  1. catch?(?...?)
  2. {
  3. AfxMessageBox?(?"?catched?"?)?;
  4. }

這段代碼在debug下沒有問題,異常會被捕獲,會彈出”catched”的消息框。但在Release方式下如果選擇了編譯器代碼優化選項,則 VC編譯器會去搜索try塊中的代碼, 如果沒有找到throw代碼,他就會認為try catch結構是多余的, 給優化掉。這樣造成在Release模式下,上述代碼中的異常不能被捕獲,從而迫使程序彈出錯誤提示框退出。

那么能否在release代碼優化狀態下捕獲這個異常呢, 答案是有的。 就是__try, __except結構,上述代碼如果改成如下代碼異常即可捕獲。

  1. __try
  2. {
  3. BYTE?*?pch?;
  4. pch?=?(?BYTE?*?)?00001234?;?// 給予一個非法地址
  5. *?pch?=?6?;?// 對非法地址賦值,會造成Access Violation 異常
  6. }
  7. __except?(?EXCEPTION_EXECUTE_HANDLER?)
  8. {
  9. AfxMessageBox?(?"?catched?"?)?;
  10. }

但是用__try, __except塊還有問題, 就是這個不是C++標準, 而是Windows平臺特有的擴展。而且如果在使用過程中涉及局部對象析構函數的調用,則會出現C2712?的編譯錯誤。 那么還有沒有別的辦法呢?

當然有, 就是仍然使用C++標準的try{}catch(..){}, 但在編譯命令行中加入?/EHa?的參數。這樣VC編譯器不會把try catch模塊給優化掉了。

(6)單攝像機標定

In the reference manual,operator signatures are visualized in the following way:?
operator ( iconic input : iconic output : control input : control output )

在HALCON所有算子中,變量皆是如上格式,即:圖像輸入:圖像輸出:控制輸入:控制輸出。

其中四個參數任意一個可以為空。

控制輸入可以是變量、常量、表達式;

控制輸出以及圖像輸入和輸出必須是變量。

?

1.caltab_points:從標定板中讀取marks中心坐標,該坐標值是標定板坐標系統里的坐標值,該坐標系統以標定板為參照,向右為X正,下為Y正,垂直標定板向下為Z正。該算子控制輸出為標定板中心3D坐標。

2.create_calib_data:創建Halcon標定數據模型。輸出一個輸出數據模型句柄。

3.set_calib_data_cam_param:設定相機標定數據模型中設置相機參數的原始值和類型。設置索引,類型,以及相機的原始內參數等。

4.set_calib_data_calib_object:在標定模型中設定標定對象。設定標定對象句柄索引,標定板坐標點儲存地址。

5.find_caltab:分割出圖像中的標準標定板區域。輸出為標準的標定區域,控制

6.find_marks_and_pose:抽取標定點并計算相機的內參數。輸出MARKS坐標數組,以及估算的相機外參數。

即標定板在相機坐標系中的位姿,由3個平移量和3個旋轉量構成。

7.set_calib_data_observ_points( : : CalibDataID, CameraIdx, CalibObjIdx,CalibObjPoseIdx, Row, Column, Index, Pose : )

收集算子6的標定數據,將標定數據儲存在標定數據模型中。輸入控制分別為標定數據模型句柄,相機索引,標定板索引,位姿索引,行列坐標,位姿。

8.calibrate_cameras( : : CalibDataID : Error) 標定一臺或多臺相機,依據CalibDataID中的數據。控制輸出平均誤差。

9.get_calib_data( : : CalibDataID, ItemType, ItemIdx, DataName : DataValue) 獲得標定數據。

依靠索引號和數據名稱來返回輸出的數據值。可查詢與模型相關的數據,與相機相關的數據(包括相機的內外參數等),與標定對象相關的數據,與標定對象的姿態相關的數據。控制輸出是要查詢的標定數據。

如:

get_calib_data (CalibDataID, 'camera', 0, 'params', CamParam) //查詢相機的位姿

get_calib_data (CalibDataID, 'calib_obj_pose', [0, NumImage], 'pose', Pose) //查詢標定板位姿

10.write_cam_par( : : CameraParam, CamParFile : ) 記錄相機的內參數,輸入控制為內參數,輸出控制為

存取相機內參數的文件名。

11.set_origin_pose( : : PoseIn, DX, DY, DZ : PoseNewOrigin)

設置新的坐標原點,控制輸入為原始的位姿和沿著世界坐標系的三個坐標軸的平移量,控制輸出為新的位姿

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/78365.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/78365.shtml
英文地址,請注明出處:http://en.pswp.cn/web/78365.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

QML圖像提供器 (Image Provider)

QML 中的圖像提供器是一種自定義圖像加載機制&#xff0c;允許你從非文件源&#xff08;如數據庫、網絡或程序生成的內容&#xff09;提供圖像數據。 主要類型 QQuickImageProvider - 基礎圖像提供器 QPixmapImageProvider - 提供 QPixmap 圖像 QImageImageProvider - 提供 …

計算機視覺與深度學習 | 雙目立體匹配算法理論+Opencv實踐+matlab實踐

雙目立體匹配 一、雙目立體匹配算法理論與OpenCV、matlab實踐一、雙目立體匹配理論二、OpenCV實踐三、優化建議四、算法對比與適用場景二、雙目立體匹配算法理論及Matlab實踐指南一、雙目立體匹配理論二、Matlab實踐步驟三、算法對比與優化建議四、完整流程示例五、常見問題與解…

AI國學智慧語錄視頻,條條視頻10W+播放量

家人們&#xff01;圖書類帶貨玩法真的非常多&#xff0c;之前也分享過蠻多&#xff0c;例如情感語錄、育兒教育、爆款圖書金句類、AI歷史人物解說類等等。 本期繼續來分享一個對于普通人來說&#xff0c;上手相當簡單&#xff0c;容易起號&#xff0c;可作為長線深耕的AI帶貨…

echart圖表使用

2、接口編寫 該部分代碼定義了UserController控制器類&#xff0c;用于處理與用戶相關的請求。包含一個用于跳轉頁面的方法和一個返回用戶詳細數據&#xff08;以 JSON 格式呈現&#xff09;的接口。前者負責將用戶導航至指定頁面&#xff0c;后者通過構建ChartVO對象并填充數…

Android短信監控技術實現:合法合規的遠程采集方案

一年經驗的全棧程序員&#xff0c;目前頭發健在&#xff0c;但不知道能撐多久。 該項目已成功部署并穩定運行于企業生產環境&#xff0c;如需個性化定制方案&#xff0c;歡迎聯系作者進行深度合作。 文章目錄 前言 一、頁面設計 1.頁面顯示 2.代碼實現 二、具體代碼實現 1.添加…

前端跨域問題怎么在后端解決

目錄 簡單的解決方法&#xff1a; 添加配置類&#xff1a; 為什么會跨域 1. 什么是源 2. URL結構 3. 同源不同源舉&#x1f330; 同源例子 不同源例子 4. 瀏覽器為什么需要同源策略 5. 常規前端請求跨域 簡單的解決方法&#xff1a; 添加配置類&#xff1a; packag…

【中間件】brpc_基礎_execution_queue

execution_queue 源碼 1 簡介 execution_queue.h 是 Apache BRPC 中實現 高性能異步任務執行隊列 的核心組件&#xff0c;主要用于在用戶態線程&#xff08;bthread&#xff09;中實現任務的 異步提交、有序執行和高效調度。 該模塊通過解耦任務提交與執行過程&#xff0c;提…

java學習之數據結構:一、數組

主要是對數組所有的東西進行總結&#xff0c;整理 適合小白~ 目錄 1.什么是數組 1.1數組定義 1.2數組創建 1&#xff09;靜態創建 2&#xff09;動態創建 1.3數組遍歷 1&#xff09;for和while遍歷 2&#xff09;foreach遍歷 2.數組越界問題及解決 2.1數組越界問題 2…

[Survey]SAM2 for Image and Video Segmentation: A Comprehensive Survey

BaseInfo TitleSAM2 for Image and Video Segmentation: A Comprehensive SurveyAdresshttps://arxiv.org/abs/2503.12781Journal/Time2503Author四川大學&#xff0c;北京大學 1. Introduction 圖像分割專注于識別單個圖像中的目標、邊界或紋理&#xff0c;而視頻分割則將這…

用Maven定位和解決依賴沖突

用Maven定位和解決依賴沖突 一、依賴沖突的常見表現二、定位沖突依賴的4種方法2.1 使用Maven命令分析依賴樹2.2 使用IDE可視化工具2.3 使用Maven Enforcer插件2.4 運行時分析 三、解決依賴沖突的5種方案3.1 排除特定傳遞依賴3.2 統一指定版本&#xff08;推薦&#xff09;3.3 使…

穿越數據森林與網絡迷宮:樹與圖上動態規劃實戰指南

在 C 算法的浩瀚宇宙中&#xff0c;樹與圖就像是神秘的迷宮和茂密的森林&#xff0c;充滿了未知與挑戰。而動態規劃則是我們探索其中的神奇羅盤&#xff0c;幫助我們找到最優路徑。今天&#xff0c;就讓我們一起深入這片神秘領域&#xff0c;揭開樹與圖上動態規劃的神秘面紗&am…

UDP / TCP 協議

目錄 一、前言&#xff1a; 數據封裝與分用&#xff1a; 二、網絡協議分層模型&#xff1a; 三、UDP / TCP 協議 UDP 協議&#xff1a; 1、UDP 協議段格式&#xff1a; 2、UDP 的特點&#xff1a; TCP 協議&#xff1a; 1、TCP 協議段格式&#xff1a; 2、TCP 協議的十…

Python 實現的運籌優化系統數學建模詳解(動態規劃模型)

相關代碼鏈接&#xff1a;https://download.csdn.net/download/heikediguoshinib/90713747?spm1001.2014.3001.5503 一、引言 在計算機科學與數學建模的廣闊領域中&#xff0c;算法如同精密的齒輪&#xff0c;推動著問題的解決與系統的運行。當面對復雜的優化問題時&…

langfuse本地安裝

目錄 安裝命令項目準備用openai測試 安裝命令 本地&#xff08;docker compose&#xff09;&#xff1a;使用 Docker Compose 在你的機器上于 5 分鐘內運行 Langfuse。 # 獲取最新的 Langfuse 倉庫副本 git clone https://github.com/langfuse/langfuse.git cd langfuse# 運行 …

每天學一個 Linux 命令(35):dos2unix

每天學一個 Linux 命令(35):dos2unix 命令簡介 dos2unix 是一個用于將 Windows/DOS 格式的文本文件轉換為 Unix/Linux 格式的實用工具。它主要處理行尾符的轉換(將 CRLF 轉換為 LF),同時也能處理編碼問題和字符集轉換。這個命令在跨平臺文件共享、代碼遷移和系統管理場…

第6章 Python 基本數據類型詳解(int, float, bool, str)細節補充

文章目錄 Python 基本數據類型深入解析(int, float, bool, str)一、整型(int)的底層機制二、浮點型(float)的陷阱與解決方案三、布爾型(bool)的底層本質四、字符串(str)的不可變性與優化五、類型間的隱式轉換與陷阱六、性能優化與工具總結:關鍵細節與最佳實踐Python…

19. LangChain安全與倫理:如何避免模型“幻覺“與數據泄露?

引言&#xff1a;當AI成為企業"數字員工"時的責任邊界 2025年某金融機構因AI客服泄露用戶信用卡信息被罰款2300萬美元。本文將基于LangChain的安全架構與Deepseek-R1的合規實踐&#xff0c;揭示如何構建既強大又安全的AI系統。 一、AI安全風險矩陣 1.1 2025年最新威…

Java快速上手之實驗六

1. 編寫ItemEventDemo.java&#xff0c;當選中或取消選中單選鈕、復選鈕和列表框時顯示所選的結果。 2&#xff0e;編寫GUIExample.java&#xff0c;當選中或取消選中單選鈕、復選鈕時在標簽中顯示相應結果。 import javax.swing.*; import java.awt.*; import java.awt.event.…

QT6 源(72):閱讀與注釋單選框這個類型的按鈕 QRadioButton,及各種屬性驗證,

&#xff08;1&#xff09;按鈕間的互斥&#xff1a; &#xff08;2&#xff09;源碼來自于頭文件 qradiobutton . h &#xff1a; #ifndef QRADIOBUTTON_H #define QRADIOBUTTON_H#include <QtWidgets/qtwidgetsglobal.h> #include <QtWidgets/qabstractbutton.h>…

【算法滑動窗口】 將x減到0的最小操作數

將x減到0的最小操作數 個人總結的八步歸納AI的歸納**8步歸納法&#xff08;極簡直白版&#xff09;**1. 問題本質2. 問題特征3. 切入點4. 解決流程5. 每步目標與操作6. 注意事項7. 最終目標8. 整體總結 代碼對照&#xff08;逐行解析&#xff09;舉個栗子&#x1f330;**一句話…