<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          自動化視覺跟蹤(樹莓派+OpenCV):幫助相機(jī)自動地跟蹤某種顏色的物體

          共 22081字,需瀏覽 45分鐘

           ·

          2023-07-31 13:44

          微信改了推送規(guī)則,如果您還想收到我們的推送!

          點擊上方“機(jī)器視覺”,右上角...選擇“置頂/星標(biāo)公眾號


          這次,我們將使用你的設(shè)備來幫助相機(jī)自動地跟蹤某種顏色的物體。

          原標(biāo)題 | Automatic Vision Object Tracking

          作者 | Marcelo Rovai

          譯 者 :林肯二百一十三 From 西安交通大學(xué) ; 刁新強(qiáng)

          01. 導(dǎo)語
          在之前的某個教程里,我們探討了如何控制Pan/Tilt Servo設(shè)備來安置一個PiCam(樹莓派的相機(jī))。這次,我們將使用你的設(shè)備來幫助相機(jī)自動地跟蹤某種顏色的物體,像下邊的動圖里那樣:


          盡管這是我第一次使用OpenCV,但我必須承認(rèn),我已經(jīng)愛上了這個“開源計算機(jī)視覺庫”。

          OpenCV對學(xué)術(shù)用途和商業(yè)用途都免費。它有C++、C、Python和Java的接口,并且支持Windows、Linux、MacOS、iOS和Android系統(tǒng)。在我的OpenCV教程系列中,我們將專注于使用樹莓派(當(dāng)然,操作系統(tǒng)就是Raspbian了)和Python。OpenCV為高效計算而生,極大地專注于實時應(yīng)用。因此,它對于物理計算(即使用可以感知和響應(yīng)模擬世界的軟件和硬件來構(gòu)建交互式物理系統(tǒng))項目來說,簡直再適合不過了!



          02. 安裝 OpenCV 3 庫
          我使用的是安裝著目前最新的Raspbian版本(Stretch)的樹莓派V3。安裝OpenCV最好的辦法就是按照Adrian Rosebrock的這篇極棒的教程:Raspbian Stretch: Install OpenCV 3 + Python on your Raspberry Pi。


          我在我的樹莓派上試了好幾種不同的OpenCV安裝教程,其中Adrian的是最棒的一篇。我建議各位讀者一步一步按照這篇教程的步驟做。

          當(dāng)你完成了Adrian的教程后,你的樹莓派應(yīng)該已經(jīng)安裝好了OpenCV的虛擬環(huán)境,并且可以進(jìn)行我們的實驗了。

          讓我們再次檢查一下虛擬環(huán)境并確認(rèn)OpenCV 3已經(jīng)正確安裝了。

          Adrian建議每次打開新的終端都執(zhí)行一次“source”命令,從而確保你的系統(tǒng)變量已經(jīng)正確設(shè)置:


          source ~/.profile

          接下來,進(jìn)入我們的虛擬環(huán)境:


          workon cv

          如果你看到你的命令提示符之前多了個(cv),那說明你已經(jīng)進(jìn)入虛擬環(huán)境“cv”了。


          (cv) pi@raspberry:~$

          Adrian強(qiáng)調(diào),Python虛擬環(huán)境“cv”是和Raspbian Stretch系統(tǒng)自帶的Python版本完全獨立的。也就是說,系統(tǒng)Python的site-packages目錄中的那些庫在虛擬環(huán)境“cv”中并不能使用——同樣,這個虛擬環(huán)境中的包在系統(tǒng)全局的Python版本中也是無法使用的。

          現(xiàn)在,Python翻譯器,啟動!


          python

          同時,請確認(rèn)你是用的是Python 3.5版本或者更高版本。

          在翻譯器中(應(yīng)該會有“>>>”提示符),導(dǎo)入OpenCV庫:


          import cv2

          如果沒有出現(xiàn)任何錯誤信息,說明OpenCV在你的虛擬環(huán)境中已經(jīng)正確安裝~



          03. 測試你的相機(jī)


          既然你的樹莓派已經(jīng)安裝好OpenCV了,那就先測試一下你的相機(jī)是否正常工作吧~(假設(shè)你已經(jīng)在你的樹莓派上安裝PiCam了)

          在你的IDE中輸入以下代碼:









          import numpy as npimport cv2cap = cv2.VideoCapture(0)
          while(True): ret, frame = cap.read() frame = cv2.flip(frame, -1) # Flip camera vertically gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) cv2.imshow( frame , frame) cv2.imshow( gray , gray) if cv2.waitKey(1) & 0xFF == ord( q ): breakcap.release()cv2.destroyAllWindows()

          上述代碼將捕獲你的PiCam的視頻流并使用BGR三色模式和灰度模式顯示。

          請注意,我的相機(jī)在組裝過程中是上下顛倒的,所以我把得到的圖片垂直翻轉(zhuǎn)了。如果你并沒有我的情況,請刪掉frame = cv2.flip(frame, -1)那一行。

          或者,你可以直接從我的GitHub下載該代碼:simpleCamTest.py

          要執(zhí)行我的代碼,運行:


          python simpleCamTest.py

          要結(jié)束程序,請按鍵盤上的[q]鍵或[Ctrl]+[C]鍵。

          下圖是我的結(jié)果:

          要學(xué)習(xí)OpenCV的更多知識,可以參考以下教程:loading -video-python-opencv-tutorial


          04. 使用 Python 與 OpenCV 進(jìn)行顏色檢測
          我們想做的一件事情就是檢測并跟蹤某種顏色的物體。為此,我們必須理解一點OpenCV是如何翻譯顏色的。


          關(guān)于顏色檢測,Henri Dang寫了一篇很棒的教程:Color Detection in Python with OpenCV。

          通常,我們的相機(jī)是使用RGB顏色模式工作的。RGB顏色模式可以這樣認(rèn)為:我們看到的所有可能的顏色都可以被三種顏色的光(紅,綠,藍(lán))組成。然而,這里我們使用的OpenCV默認(rèn)是BGR顏色模式,也就是將RGB的順序進(jìn)行了調(diào)整。

          正如以上所述,使用BGR顏色模式,每一個像素可以由三個參數(shù)——藍(lán)、綠、紅組成。每個參數(shù)通常是一個0~255之間的值(或者十六進(jìn)制下0x00到0xFF)。比如,電腦屏幕上的純藍(lán)色的BGR值分別為:藍(lán)255,綠0,紅0。

          OpenCV還使用一種RGB模型的替代——HSV(Hue色相,Saturation色度,Value色值)顏色模型,它是70年代的計算機(jī)圖形學(xué)研究者為了更好地與人類視覺對顏色屬性的感知方式相匹配而提出的。

          好。如果你想要使用OpenCV跟蹤某一種確定的顏色,你必須使用HSV模型定義它。



          示例
          比如說,我想要跟蹤下圖中的黃色塑料盒。首先要做的就是找出它的BGR值。你可以用很多辦法采樣(這里我用的是PowerPoint)。


          我這里找到的是:

          • 藍(lán)色:71

          • 綠色:234

          • 紅色:213

          下面,我們需要將BGR模型(71, 234, 213)轉(zhuǎn)換為HSV模型,這將被定義為上下界取值范圍的形式。讓我們執(zhí)行以下代碼:










          import sysimport numpy as npimport cv2
          blue = sys.argv[1]green = sys.argv[2]red = sys.argv[3]
          color = np.uint8([[[blue, green, red]]])hsv_color = cv2.cvtColor(color, cv2.COLOR_BGR2HSV)hue = hsv_color[0][0][0]
          print("Lower bound is :"),print("[" + str(hue-10) + ", 100, 100]")print("Upper bound is :"),print("[" + str(hue + 10) + ", 255, 255]")

          你也可以到GitHub下載我的這段代碼:bgr_hsv_converter.py

          要執(zhí)行我的腳本,運行以下命令并把BGR值作為參數(shù):


          python bgr_hsv_converter.py 71 234 213

          這個程序?qū)嬎阄覀兡繕?biāo)物體HSV值的上下界。給定以上參數(shù)會得到:


          lower bound: [24, 100, 100]

          以及


          upper bound: [44, 255, 255]

          以上結(jié)果將顯示在終端中。

          最后讓我們看看OpenCV如何根據(jù)給出的顏色來選擇出我們的物體。
















          import cv2import numpy as np
          # Read the picure - The 1 means we want the image in BGRimg = cv2.imread( yellow_object.JPG , 1)
          # resize imag to 20% in each axisimg = cv2.resize(img, (0,0), fx=0.2, fy=0.2)
          # convert BGR image to a HSV imagehsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
          # NumPy to create arrays to hold lower and upper range# The “dtype = np.uint8” means that data type is an 8 bit integerlower_range = np.array([24, 100, 100], dtype=np.uint8)upper_range = np.array([44, 255, 255], dtype=np.uint8)
          # create a mask for imagemask = cv2.inRange(hsv, lower_range, upper_range)
          # display both the mask and the image side-by-sidecv2.imshow( mask ,mask)cv2.imshow( image , img)
          # wait to user to press [ ESC ]while(1): k = cv2.waitKey(0) if(k == 27): breakcv2.destroyAllWindows()

          你也可以到GitHub下載我的這段代碼: colorDetection.py

          要執(zhí)行我的腳本,運行以下命令并把圖片名作為參數(shù)(我這里的圖片為yellow_object.JPG):


          python colorDetection.py  

          這個腳本將顯示原圖(“image”窗口)和OpenCV使用顏色范圍過濾后的掩膜(“mask”窗口)。



          05. 移動物體跟蹤
          既然我們已經(jīng)知道了如何用掩膜來選擇出我們的物體,那就讓我們用相機(jī)來實時跟蹤他的移動吧。為此,我基于Adrian Rosebrock的OpenCV小球目標(biāo)跟蹤教程寫了我的代碼。


          我強(qiáng)烈建議你詳細(xì)閱讀Adrian的教程。

          首先,請確認(rèn)你已經(jīng)安裝了imutils庫。它是Adrian基于OpenCV自制的圖像處理基本任務(wù)(如修改尺寸、翻轉(zhuǎn)等)的易用函數(shù)集合。如果你還沒有安裝,請在你的Python虛擬環(huán)境中運行下面的命令安裝:


          pip install imutils

          下面,從我的GitHub下載ball_tracking.py代碼并用下面的命令執(zhí)行:


          python ball_traking.py

          你將會看到類似于下面的gif的結(jié)果:

          總體而言,我與Adrian的代碼除了“視頻垂直翻轉(zhuǎn)”之外沒有什么不同:


          frame = imutils.rotate(frame, angle=180)

          請注意,這里使用的顏色掩膜的邊界值是我們在上一步得到的。



          06. 測試通用 IO
          現(xiàn)在我們已經(jīng)搞定OpenCV的基礎(chǔ)了,是時候給樹莓派裝個LED來試一下通用IO了。


          請按照上圖的電路做:LED的負(fù)極接到GPIO 21口,正極接一個220Ω的電阻再連接GND。

          現(xiàn)在使用我們的Python虛擬環(huán)境測試一下這個LED吧!

          請注意,有可能你的Python虛擬環(huán)境還沒有安裝樹莓派的RPi.GPIO。如果還沒有的話,運行下面的命令即可使用pip安裝(請先確定自己在虛擬環(huán)境“cv”中):


          pip install RPi.GPIO

          現(xiàn)在用一個Python腳本來做個簡單的測試:











          import sysimport timeimport RPi.GPIO as GPIO
          # initialize GPIO and variablesredLed = int(sys.argv[1])freq = int(sys.argv[2])GPIO.setmode(GPIO.BCM)GPIO.setup(redLed, GPIO.OUT)GPIO.setwarnings(False)
          print(" [INFO] Blinking LED (5 times) connected at GPIO {0} at every {1} second(s)".format(redLed, freq))for i in range(5): GPIO.output(redLed, GPIO.LOW) time.sleep(freq) GPIO.output(redLed, GPIO.HIGH) time.sleep(freq) # do a bit of cleanupprint(" [INFO] Exiting Program and cleanup stuff ")GPIO.cleanup()

          上邊的代碼需要一個GPIO端口號和一個LED閃爍頻率作為參數(shù)。LED閃爍5次后程序結(jié)束。結(jié)束之前記得釋放GPIO。

          也就是說,運行腳本時要給出兩個參數(shù):“LED GPIO”和frequency。舉個例子:


          python LED_simple_test.py 21 1

          上邊的指令意味著使用“GPIO 21”上連接的LED燈,并且每1秒閃爍一次,總共閃爍五次。

          同樣,上邊這段代碼也可以在GitHub下載:GPIO_LED_test.py

          上邊的圖片顯示了我的程序結(jié)果。至于LED燈亮不亮,就要各位自己去檢驗啦。

          好,下面讓我們把OpenCV和基本GPIO操作一起耍起來~



          07. 識別顏色和GPIO(General-purpose input/output:通用型輸入輸出)交互
          讓我們開始集成 OpenCV 代碼和 GPIO 進(jìn)行交互。我們會從 最后的OpenCV 代碼開始,并且我們將會把 GPIO_RPI 庫集成到代碼中,其目的是在攝像頭檢測到我們的著色物體時,能使紅色LED常亮。 這一步驟使用的代碼是基于 Adrian 寫得非常不錯的教程OpenCV, RPi.GPIO, and GPIO Zero on the Raspberry Pi


          第一件需要做的事情是:”創(chuàng)建“我們的LED對象,目的是為了連接上指定的GPIO。




          import RPi.GPIO as GPIOredLed = 21GPIO.setmode(GPIO.BCM)GPIO.setwarnings(False)GPIO.setup(redLed, GPIO.OUT)

          第二,我們必須初始化LED(關(guān)燈狀態(tài)):


          GPIO.output(redLed, GPIO.LOW)ledOn = False

          現(xiàn)在,在代碼循環(huán)體中,當(dāng)物體被檢測到,”圓“被創(chuàng)建時,我們會把LED燈打開



          GPIO.output(redLed, GPIO.HIGH)ledOn = True

          你可以在我的GitHub庫中下載到完整的代碼:object_detection_LED.py

          運行代碼使用到的命令行:


          python object_detection_LED.py

          下面的圖片就是實現(xiàn)的效果。提示:當(dāng)物體被檢測到時,在圖片左下方的LED燈就會亮著。

          試試不同顏色,不同形式的物體,你會發(fā)現(xiàn)一旦顏色和掩碼范圍內(nèi)匹配的話,LED燈就會亮起來。

          下面的視頻顯示了一些經(jīng)驗。要注意的是,只有在色值一定范圍內(nèi)的黃色物體才會被檢測到,LED等會亮起來。而其他不同顏色的物體則會被略過。

          正如最后一步解釋的那樣,我們只是用到了LED燈。但是在視頻中,攝像頭卻集成了云臺(Pan Tilt:指攝像頭可全方位左右/上下移動),所以不妨先忽略它。我們會下一步驟中實現(xiàn)云臺機(jī)制。



          08. 云臺機(jī)制


          現(xiàn)在我們已經(jīng)用上了基本的 OpenCV 和 GPIO,那么接下來我們升級一下云臺機(jī)制。

          獲取更多細(xì)節(jié),請查看我的教程:Pan-Tilt-Multi-Servo-Control

          伺服(servo:一種微型電子與機(jī)械產(chǎn)品的合體轉(zhuǎn)置)需要連接額外的 5V 電力供應(yīng)模塊,并且這些伺服使用它們的數(shù)據(jù)插口(在我這邊,它們是黃色的布線)連接草莓派的 GPIO,連接方式如下:

          • GPIO 17 ==> 傾斜伺服

          • GPIO 27 ==> 水平伺服

          不要忘記了將 GND(GND:ground,接地端)引腳 也連到一起 ==> 草莓派——伺服——額外電力供應(yīng)模塊

          你有個可選項:在草莓派 GPIO 和 服務(wù)端的數(shù)據(jù)輸入引腳之間串聯(lián)一個 1K 歐姆的電阻。這個舉措可以在伺服發(fā)生問題時保護(hù)你的草莓派。

          讓我們一起用這個機(jī)會在 虛擬 Python 環(huán)境中測試一下我們的伺服。
          我們執(zhí)行 Python 腳本來測試一下驅(qū)動器。










          from time import sleepimport RPi.GPIO as GPIO)
          GPIO.setmode(GPIO.BCM)GPIO.setwarnings(False)def setServoAngle(servo, angle): pwm = GPIO.PWM(servo, 50) pwm.start(8) dutyCycle = angle / 18. + 3. pwm.ChangeDutyCycle(dutyCycle) sleep(0.3) pwm.stop()
          if __name__ == __main__ :import sys servo = int(sys.argv[1]) GPIO.setup(servo, GPIO.OUT) setServoAngle(servo, int(sys.argv[2])) GPIO.cleanup()

          上面代碼的核心是 setServoAngle(servo, angle)方法。這個方法會接收的參數(shù)有:一個 GPIO 數(shù)字,一個伺服被定位的角度值。一旦把角度值輸入到這個方法中,我們必須將其轉(zhuǎn)換到等效的工作周期中(duty cycle:指伺服進(jìn)入角度變化的時間段)。

          執(zhí)行腳本時,你要輸入兩個參數(shù)值:GPIO 伺服對應(yīng)的端口以及角度值。

          例如:


          python angleServoCtrl.py 17 45

          上面的命令行會將在 連接在GPIO 17端口的伺服(傾斜伺服)定位到45度的”海拔“上。

           angleServoCtrl.py 文件可以在我的GitHub上下載到。



          09. 實時獲取物體位置
          將物體定位到屏幕中央的想法會使用到云臺機(jī)制。實現(xiàn)這個想法壞消息是 我們必須實時地定位到物體的位置,但好消息是 如果我們已經(jīng)知道了物體中心坐標(biāo)點,這將會很容易。


          首先,我們使用之前用過的”object_detect_LED“代碼,以及修改該代碼,以打印出檢測物體的 x,y坐標(biāo)點。

          代碼可以從我的GitHub中下載到:objectDetectCoord.py

          代碼核心邏輯是:在檢測到的物體區(qū)域畫出一個圓,并且在圓的中心畫一個紅點。









          # only proceed if the radius meets a minimum sizeif radius > 10: # draw the circle and centroid on the frame, # then update the list of tracked points cv2.circle(frame, (int(x), int(y)), int(radius), (0, 255, 255), 2) cv2.circle(frame, center, 5, (0, 0, 255), -1)
          # print center of circle coordinates mapObjectPosition(int(x), int(y))
          # if the led is not already on, turn the LED on if not ledOn: GPIO.output(redLed, GPIO.HIGH) ledOn = True

          我們輸出中心點坐標(biāo)到 mapObjectPosition(int(x), int(y)) 方法中,目的是打印這些坐標(biāo)點。方法如下:



          def mapObjectPosition (x, y): print ("[INFO] Object Center coordinates at X0 = {0} and Y0 = {1}".format(x, y))

          在跑這個程序時,我們會看到在命令行終端上輸出的 (x,y)坐標(biāo)點,如下圖所示:

          太好了!我們可以使用這些坐標(biāo)點作為云臺追蹤系統(tǒng)的開始點。



          10. 物體位置追蹤系統(tǒng)
          我們想要目標(biāo)始終在屏幕的中央,我們來定義一下,例如:假如滿足下方條件,我們就認(rèn)為物體在中央:


          • 220 < x < 280

          • 160 < y < 210

          而在這個界限之外的話,我們就需要通過移動云臺裝置來修正偏差。基于這個邏輯,我們可以構(gòu)建如下方法mapServoPosition(x, y)。需要注意的是,該方法中使用到的”x“和”y“是和我們之前打印出來的中心位置一樣的。















          # position servos to present object at center of the framedef mapServoPosition (x, y): global panAngle global tiltAngle if (x < 220): panAngle += 10 if panAngle > 140: panAngle = 140 positionServo (panServo, panAngle) if (x > 280): panAngle -= 10 if panAngle < 40: panAngle = 40 positionServo (panServo, panAngle) if (y < 160): tiltAngle += 10 if tiltAngle > 140: tiltAngle = 140 positionServo (tiltServo, tiltAngle) if (y > 210): tiltAngle -= 10 if tiltAngle < 40: tiltAngle = 40 positionServo (tiltServo, tiltAngle)

          基于這些(x,y)坐標(biāo)點,并使用方法positionServo(servo, angle) ,伺服位置命令已經(jīng)產(chǎn)生了。舉個例子:假如”y“的位置是”50“,這就意味著我們的物體幾乎在屏幕的頂部,也就是說 攝像頭的視野是往下的(比如說傾斜裝置處于120°上),所以要調(diào)低傾斜裝置的角度(比如說調(diào)到100°),如此一來,攝像頭的視野將會抬高,進(jìn)而使得物體在屏幕上就會往下方移動(比如 y坐標(biāo)提高到190的位置)。

          上面的圖例在幾何上解釋了舉的例子。

          思考一下水平裝置上的攝像頭如何移動的。要注意的是 屏幕并不是鏡像映射的,也就是說,當(dāng)你面對著攝像頭時,如果你將物體移動到”你的左邊“,但在屏幕上看,物體卻會在”你的右邊“移動。

           positionServo(servo, angle)方法可以寫成這樣:






          def positionServo (servo, angle): os.system("python angleServoCtrl.py " + str(servo) + " " + str(angle)) print("[INFO] Positioning servo at GPIO {0} to {1} degrees".format(servo, angle))

          上面的代碼中,我們將會調(diào)用之前展示的伺服移動腳本。

          注意: angleServoCtrl.py一定要和 objectDetectTrac.py 在同一個目錄下。

          完整的代碼可以從我的GitHub上下載:objectDetectTrack.py

          下面的gif 展示了我們的項目運行的效果:



          11. 結(jié)論


          我一如既往地希望這個項目能幫助其他人找到進(jìn)入激動人心的電子世界的入口。

          想要獲取項目細(xì)節(jié)以及最終的代碼,可以瀏覽我的GitHub倉庫:OpenCV-Object-Face-Tracking 。

          而想了解更多的項目,請瀏覽我博客:MJRoBot.org

          下面是我下一篇教程的預(yù)告,我們將會探索”人臉追蹤和檢測“。

          向你們發(fā)出來自世界南半球的問候!

          機(jī)器視覺
          機(jī)器視覺,工業(yè)自動化,工業(yè)機(jī)器人領(lǐng)域的新媒體平臺:工業(yè)自動化,機(jī)器人,機(jī)器視覺應(yīng)用案例,行業(yè)展會,機(jī)器視覺系統(tǒng),機(jī)器視覺軟件技術(shù)算法,機(jī)器視覺光源,視覺檢測,工業(yè)相機(jī),工業(yè)鏡頭,圖像采集卡,三維視覺技術(shù),三維測量技術(shù),工業(yè)4.0
          公眾號
          —THE END—

          溫馨提示:

          因最近微信公眾平臺推送規(guī)則改變,很多讀者反饋沒有及時看到更新的文章。根據(jù)最新規(guī)則,建議多點擊“推薦閱讀、分享、收藏”等,成為常讀用戶。


          熱門文章推薦:點擊直接進(jìn)入相關(guān)文章

          001:計算機(jī)視覺領(lǐng)域研究資源及期刊、會議介紹

          003:120圖勾勒全球AI產(chǎn)業(yè)完整圖譜!

          004:Facebook 開源計算機(jī)視覺系統(tǒng),從像素水平理解圖像(附論文及代碼)

          005:想成為機(jī)器學(xué)習(xí)工程師?這份自學(xué)指南你值得收藏

          006:十一種通用濾波算法

          007:圖像處理與計算機(jī)視覺基礎(chǔ),經(jīng)典以及最近發(fā)展

          008:機(jī)器人行業(yè)深度報告(完整版)

          009:從洗衣妹到谷歌首席科學(xué)家,她靠孤獨改變了人工智能界!

          010:工業(yè)級機(jī)器視覺行業(yè)研究報告

          011:雙遠(yuǎn)心工業(yè)鏡頭的原理簡述

          012:如何裝備一個學(xué)術(shù)型的 iPad ?

          013:機(jī)器視覺系統(tǒng)概述

          015:為什么最好的機(jī)械臂是7個自由度,而不是6個?

          016:史上最給力的技術(shù)視頻!

          017:機(jī)器人10大流行編程語言對比,你掌握了哪種?

          018:新奇復(fù)雜機(jī)械原理圖!

          019:機(jī)器人控制系統(tǒng)相關(guān)知識大匯集
          020:機(jī)器人的工作原理,史上最詳細(xì)的解析!

          021:光源選型知識點
          022:這才是機(jī)械手,這才是自動化,你那算什么?
          023:攝像機(jī)和鏡頭的基礎(chǔ)知識
          024:物聯(lián)網(wǎng)產(chǎn)業(yè)鏈全景圖(附另13大電子行業(yè)全景圖,必收藏)
          025:日本到底強(qiáng)大到什么地步?讓人窒息!看后一夜未眠

          026:德國機(jī)械用行動驚艷全世界:無敵是多么寂寞


          一切有為法,如夢幻泡影,如露亦如電,應(yīng)作如是觀!
          歡迎轉(zhuǎn)發(fā)、留言、點贊、分享,感謝您的支持!
          瀏覽 511
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日韩在线观看一区 | 国产青榴社区 | 操逼乱轮国产 | 看国产管黄色电影在线 | 久草手机在线 |