• COSPLAY 3D 建模
  • #maker+t=market
  • 3D列印服務
  • 1
  • 2
  • 3

Python人工智慧圖控 - 研習交流廳 造訪社團 » 套件

原文網址 石小川
2020-02-14 08:43:41

使用Python語言做自動控制的方法 - I I I通信篇
網路發達後要做到機器設備遠端監控已非遙不可及了,網路通信在無人工廠的監控設備上會越來越重要。 圖中展示的系統是TCP/IP通訊協定的主從(Server-Client)式架構,TServer伺服端程式負責現場機器設備運作及回傳Sensor數據和即時影像給TClient用戶端處理。 為了方便教學緣故,已將網路封包加密演算法及帳號管理拿掉,通信程式精簡許多,比較容易理解,伺服端是以C#實作,用戶端會以C#及Python各實作一個版本。建議伺服端以C++或C#為主,而用戶端可用Python設計遠端控制APP,將來回傳的遙測大數據可很容易的用Python模組分析。
熟悉遠端操控軟硬體對將來有志設計無人工廠機器設備的朋友幫助很大,習得一技之長絕對增加競爭力。2月分我將開此TCP/IP主從式通信實作課程,因為現在病毒肆虐,採遠距教學方式較適合,沒有機器設備的同學我會提供兩台三軸機台做遠距連線操控練習,可在家寫Python程式做遠端連線操控,詳細辦法及日期我再擇期公布,歡迎有興趣的朋友來報名上課。
第五章 實作C#、Python軸控遠端機台 Python很適合做數據擷取及分析,有幾萬個套件模組讓你發揮,全世界的網路根本就是一個取之不竭,用之不盡的海量資料庫。Python 只要引入模組,要寫個爬蟲程式沒幾行代碼,就可抓你關注的網頁資料做數據分析,真的只是小菜一碟而已,這是筆者會喜歡它的原因之一 。 Python既然在人工智慧、深度學習領域都有它的蹤跡,那麼自動控制的機台也必定不會缺席的,自動化工廠的機器設備和感測器交握信號彙整起來可能有上萬種數據需要及時處理並回傳,此時Python會是一個不錯的選擇。 本章通訊系統中的伺服端仍然採用第四章的C#版本 : TServer,用戶端則是Python版本 : PyClient,理由無他,伺服端需要具備同時快速處理許多用戶及機器設備,負擔較重,建議伺服端實作還是以C++或C#為主,處理速度會快很多。 Python標準庫支援的TCP/IP稍微陽春些,筆者這裡是採用PyQt5 QtNetwork通訊模組,函式庫支援豐富,因已封裝底層API,通訊程式也比較好寫,故推薦用此方式,學習道路可少走一些遠路。 伺服端程式命名為 :TServer(C#),用戶端程式命名 : PyClient(Python)。 TServer 第四章已介紹過,在此略過, 請讀者再複習一下內文。
下列程式碼是Python版本用戶端TCP/IP通訊模組部分原始碼,有興趣的朋友歡迎報名參加遠距指導教學課程(開課日期 : 2020/02/19, 下星期三)。
# -*- coding: utf-8 -*- ''' 石小川 / Michael Shih 光騰高科技工作室 / Quantum Tek. ''' import time #OpenCV模組 import cv2 from PyQt5.QtNetwork import QTcpSocket, QHostAddress, QAbstractSocket, QNetworkInterface,\ QNetworkAddressEntry, QHostInfo,QNetworkConfiguration,\ QNetworkConfigurationManager from PyQt5.QtCore import QObject, pyqtSignal from PyQt5.QtCore import Qt, QByteArray, QDataStream, QIODevice from TStream import TStream #------------------------------------------------------------------------------ #Client通信處裡類別 #------------------------------------------------------------------------------ class TcpClient(QTcpSocket): #signal define def __init__(self, parent=None): super(TcpClient, self).__init__(parent) self.__serverIP = QHostAddress() self.__serverPort = 8000 #int self.__userName = "" self.__clientSocket = None self.__pImage = None self.__chunkMode = False #切換接收mode是 command 或 chunkBytes self.__chunkCount = 0 self.__chunkLength = 0 self.__chunkBytes = QByteArray() self.__Dro = [] #------------------------------------------------------------------------ def Open(self, ip, port, userName): if not self.__serverIP.setAddress(ip): return False self.__serverPort = port self.__userName = userName if(self.__userName == ''): return False self.__clientSocket = QTcpSocket(self) self.__clientSocket.abort(); self.__clientSocket.connected.connect(self.Connected) self.__clientSocket.disconnected.connect(self.Disconnected) self.__clientSocket.readyRead.connect(self.dataReceived) self.__clientSocket.connectToHost(self.__serverIP, self.__serverPort) self.SendCommand_Connect(self.__userName) #------------------------------------------------------------------------ def Close(self): try: self.SendCommand_Disconnect(self.__userName) self.__clientSocket.disconnectFromHost() except Exception as e: print(e) #------------------------------------------------------------------------ def ListenServer(self, byteArray): stream = TStream() #byteArray Data structure : command(4) + datalength(4) + data(dataLength) if(self.__chunkMode == False): command = stream.GetPackCommand(byteArray) bData = stream.GetPackBytes(byteArray) #bData是純資料存 , 扣掉command(4)和扣掉datalength(4) length = len(bData) #接收到資料的長度 if(command == 9999): #新用戶者上線通知 data = stream.BytesToString(bData) #not used self.SendCommand_JogMode(0) elif(command == 1): #user要求對所有 Client廣播 data = stream.BytesToString(bData) #not used elif(command == 2): #//user 私密Client data = stream.BytesToString(bData) #not used elif(command == 3): #//image 需分多次接收 self.__chunkMode = True #接下來開始接收大塊資料 (>65536 都是大塊資料) self.__chunkCount = 0 self.__chunkBytes.clear() self.__isImage = False; nCols, nRows, nChannels = stream.ImageSize(bData) #一張影像大小 4(nCols) + 4(nRows) + 4(nChannels) + 320x 240 x3 = 230412 #減去已接收到的資料 (65536-4 = 65528) self.__chunkLength = nCols*nRows*nChannels + 12 self.__chunkCount = length self.__chunkBytes.append(bData) elif(command == 4): #//接收Server送來三軸位置資料 data = stream.BytesToString(bData) codes = data.split('|') #print (codes) self.__Dro.clear() for code in codes: #字串轉浮點 self.__Dro.append(float(code)) else: #chunkMode length = len(byteArray) self.__chunkCount += length self.__chunkBytes.append(byteArray) if(self.__chunkCount >= self.__chunkLength): self.__pImage = stream.ByteArrayToMat(self.__chunkBytes) self.SendCommand_Position(self.__userName) self.__chunkMode = False #切換回command模式

王登程
2020-02-14 20:16:43

如果待加工料可以自动化输送到加工台,那技术上真的可以远程加工了。


原文網址 石小川
2020-02-06 14:41:27

近期要開 "使用C# 及 Python語言開發伺服端-用戶端遠距遙控和即時影像傳輸課程",採遠距教學,因為會用到免費工具軟體,先貼文開發環境建立步驟,讓有興趣的學員預先下載複習! 請參照附錄A及附錄B。 附錄A – Visual Studio2019 C# 開發環境安裝步驟 步驟1 到下面微軟官方網站下載 Visual Studio2019 Community版本(圖A1) https://visualstudio.microsoft.com/zh-hant/downloads/ ? (圖A2) 步驟2 將來影像處理會用到OpenCV,建立專案後順便安裝EmguCV。 開啟 Visual Studio2019,進入專案後,如圖選擇管理方案的 NuGet套件。 ? (圖A3) 如圖瀏覽處輸入Emgu搜尋到EmguCV v3.1.0.1,選取此版本按下滑鼠安裝。 ? 回到工具項,按選擇工具箱項目。 ? (圖A4) 在專案項,選擇加入參考 專案裡面有個資料夾packages\EmguCV.3.1.0.1\lib\net30 裡面有.dll全部加入參考。 ? (圖A5) 此時工具箱多出四個元件表示安裝成功。 ? (圖A6) 用NuGet套件管理員安裝很方便,但不同專案必須重新安裝一次,也可 手動在專案/加入參考加入自行下載的動態連結程式庫(dll),如此所有專案都 可引用。這部分留給讀者自行練習了。 附錄B – Python開發環境安裝步驟 因為我手邊的 iMC3082E 運動卡是32 Bit,所以下載 32 bit版本。 (如果Python不直接用來呼叫32 bit動態連結庫的話,只設計用戶端連線,其實 也可使用64 bit版本) 步驟 1 安裝 免費開源的 Python 整合開發環境 Anaconda 到官網 https://www.anaconda.com/distribution/ 下載並執行( Python 3.7 Version 32-Bit ) : Anaconda3-2019-.07-Windows-x86.exe Anaconda 會自動幫你管理 Python 的環境及函式庫,可以避 開一堆麻煩事,如果你的API 動態連結程式庫(DLL)是32 Bit,則Python版本就必須是32 Bit, 否則App執行會錯誤, 如果之前已經有安裝 Python,建議先移除,避免造成系統環 境錯誤。 圖1-1 ? 步驟 2 建議選 All Users。 圖1-2 ? 步驟 3 可自選路徑,Win10 預設的路徑是在 C:\ProgramData\Anaconda3,我路徑放在 C:\Anaconda3\。 圖1-3 ? 步驟 4 建議勾選 Add Anaconda to the system PATH environment variable ,這很 重要,勾了才會自動將 Anaconda 路徑加進系統環境變數中。 圖1-4 ? 步驟 5 安裝完成,建議 Windows 作業系統重先啟動。 圖1-5 ? 步驟 6 滑鼠左鍵開啟 Anaconda Prompt 視窗(Windows 命令提示字元) ,用 Python 指令 pip install 安裝下列開發程式需要引用的套件 pip install opencv-python pip install numpy pip install PyQt5 pip install PyQt5-tools 圖1-6 ? **[註1] **spyder 3.3.6 尚未支援 pyQt5 ver.5.13.1 我的版本: PyQt5 Version is: 5.9.2 改這個版本看看 方法: Command Line 打下列指令, 指定版本 pip install PyQt5==5.9.2 **[註 2] **pip 是Python套件管理系統(A tool for installing and managing Python packages) ,在命令列下可很輕易地安裝Python套件。 PIP 操作命令 pip list # 查詢目前系統安裝了哪些套件 pip search package # 搜尋相關套件 pip install package # 安裝套件 pip uninstall package # 移除套件 pip show --files package # 秀出套件檔案列表 pip list --outdated # 列出過期套件 pip install --upgrade package # 升級套件

Lai YenYu
2020-02-06 15:31:39

開課資訊在何處呢

John Chou
2020-02-06 16:15:53

推!請教開課平台..?


原文網址 石小川
2019-12-15 17:44:44

對於Linux工程師來說內嵌系統交叉編譯環境的建立較複雜, 手動編譯起來時常是一個噩夢, 其實只要資料完備不會很困難, 下面我把一些講義分享出來給有需要的好友參考一下, 期望可以少走一些冤枉路! 我PC的Linux作業系統版本是Fedora 20-i386, Embedded system 是ARM11板子的內嵌系統, 我在PC開發的程式是Qt5.4.1, opencv是3.1.0, PC開發環境下寫好的程式再移植到ARM11板子上, 可正常運作, 沒圖沒真相, 如圖程式是usb camera程式, 可顯示JPG照片及動態顯示攝影機視訊! 由於QT 及 OpenCV arm-linux交叉編譯比較冗長, 我再另闢專欄解說, 這之前我先列出交叉編譯需要用到的一些程式庫的編譯詳細步驟, 有不清楚的地方也可跟我討論一下! //-------------------------------------------------------------------------------
Linux交叉編譯環境建立 講義 交叉編譯(Cross compiler)是在一種處理器架構平台上(如PC-x86架構,此稱PC平台)編譯連結成另一個處理器架構平台(如ARM架構,此稱Target平台)所能執行程式的工具軟體。 A. PC-x86平台環境建立步驟
(1)Install Fedora 20
Download Linux OS,版本為Fedora20-i386-DVD.iso,燒寫
至光碟片,然後安裝作業系統到PC。
先更新作業系統。
yum update -y (2)Install Fedora 20相關工具軟體
yum install –y filezilla putty cmake cmake-gui gcc gcc-c++
yum install –y automake libtool tslib (3)Install arm-linux-gcc
(3-1)解壓縮arm-linux-gcc-4.5.1-v6-vfp-20101103.tgz
執行Fedora 20>>終端機程式,輸入:
tar xvzf arm-linux-gcc-4.5.1-v6-vfp-20101103.tgz –C /opt/,解壓縮將arm-linux-gcc-4.5.1安裝到/opt/FriendlyARM/toolschain/4.5.1。
p.s. 路徑一定要放在此(/opt/),不能更改,否則會錯誤。
(3-2)將arm-linux-gcc的路徑加到系統環境變數中
method 1. 修改檔案.bashrc(個人環境)
用vi 編輯 /root/.bashrc
最後一行加上:
export PATH=$PATH:/opt/FriendlyARM/toolschain/4.5.1/bin
儲存後OS重新登錄User即可作用。
method 2. 修改檔案 /etc/profile(全域環境)
最後一行加上:
export PATH=$PATH:/opt/FriendlyARM/toolschain/4.5.1/bin
儲存後須重新開機始可作用。
(3-3)在終端機輸入arm-linux-gcc –v,如果有gcc相關資訊顯示出來表示設定成功。 (4)交叉編譯相關程式庫
如果沒用到可選擇跳過不安裝,詳細交叉編譯方法請看附錄A。
(4-1)交叉編譯tslib
觸控面板驅動函式庫。
(4-2)交叉編譯ffmpeg
影片播放與轉檔函式庫。
(4-3)交叉編譯gtk
圖形介面開發套件。
(4-4)交叉編譯jpeg
Jpeg功能函式庫。
(4-5)交叉編譯png
Png功能函式庫。
(4-6)交叉編譯x264
X264編碼器函式庫。
(4-7)交叉編譯yasm
編譯ffmpeg時可指定用yasm指令編譯,提高編譯速度。
(4-8)交叉編譯zlib
資料壓縮函式庫。
(4-9)交叉編譯qt5.4.1
跨平台的c++應用程式開發工具。 (5)Install Qt Creator
到Qt官方網站:
https://www.qt.io/download-open-source/#section-2
選擇下載Qt Online Installer for Linux 32-bit 線上安裝Qt Creator相關程式。安裝程式會自動安裝PC平台的Qt,至於Target平台的Qt必須手動交叉編譯來安裝。
(為求系統穩定,盡量以Qt 5.4.1為開發版本。) (6)Install Opecv
到Opencv官方網站:
http://opencv.org/downloads.html
選擇下載Opencv-3.1.0.zip 附錄A
A-1. 交叉編譯tslib
功能: 觸控面板驅動函式庫。
在終端機按照步驟輸入指令如下:
(1)git clone https://github.com/kergoth/tslib
//download tslib source code
(2) cp /root/tslib /opt/ -r
//copy /root/tslib to /opt
(3)cd /opt/tslib
//change dir to /tslib
(4)./autogen.sh
//執行安裝腳本
(5) ./configure CC=arm-linux-gcc CXX=CC=arm-linux-g++ --prefix=/opt/tslib-arm --host=arm-linux ac_cv_func_malloc_0_nonnull=yes
//配置tslib
(5) make
//產生makefile
(6) make install
//編譯完成後函示庫自動安裝到 /opt/tslib-arm A-2. 交叉編譯zlib
功能: 提共資料壓縮之用的函式庫。
在終端機按照步驟輸入指令如下:
(1) download and copy zlib-1.2.8 to /opt
(2) cd /opt/ zlib-1.2.8
(3) CC=arm-linux-gcc ./configure --prefix=/opt/zlib-arm
(4) make
(5) make install A-3. 交叉編譯jpeg
功能: jpeg函式庫。
在終端機按照步驟輸入指令如下:
(1) download and copy jpeg-9 to /opt
(2) cd /opt/ jpeg-9
(3) CC=arm-linux-gcc ./configure --prefix=/opt/jpeg9-arm -- host=arm-linux
(4) make
(5) make install A-3. 交叉編譯png
功能: png函式庫。
在終端機按照步驟輸入指令如下:
(1) download and copy libpng-1.6.23 to /opt
(2) cd /opt/ libpng-1.6.23
(3) ./configure CC=arm-linux-gcc --prefix=/opt/png-arm -- host=arm-linux
(4) make
(5) make install A-4. 交叉編譯yasm
功能: yasm指令可提高編譯ffmpeg速度。
在終端機按照步驟輸入指令如下:
(1)download and copy yasm-1.3.0 to /opt
(2)cd /opt/ yasm-1.3.0
(3)./configure CC=arm-linux-gcc --prefix=/opt/yasm-arm --host=arm-linux
(4)make
(5)make install A-5. 交叉編譯x264
功能: x264編碼器函式庫。
在終端機按照步驟輸入指令如下:
(1)download and copy x264-snapshot-20160220-2245-stable to /opt
(2)cd /opt/x264-snapshot-20160220-2245-stable
(3)./configure CC=arm-linux-gcc --enable-shared --host=arm-linux --disable-asm --prefix=/opt/x264-arm
(4)make
(5)make install A-6. 交叉編譯ffmpeg
功能: 影片播放與轉檔函式庫。
在終端機按照步驟輸入指令如下:
(1) download and copy ffmpeg-3.1.1 to /opt
(或直接下載: git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg)
(2)cd /opt/ ffmpeg-3.1.1
(3)./configure --enable-cross-compile --cc=arm-linux-gcc --arch=arm --target-os=linux --enable-shared --enable-gpl --disable-stripping --enable-pthreads --enable-small --disable-parsers --disable-optimizations --disable-yasm --disable-armv6 --disable-static --disable-amd3dnow --prefix=/opt/ffmpeg-arm
(4)make
(5)make install

Jade Yang
2019-12-15 18:43:39

林永仁
2019-12-16 09:09:29


原文網址 石小川
2019-12-05 07:42:33

此種工業相機可用程式控制內部一些參數,對於機器視覺有興趣的朋友可以參考一下此套件。 技術提示 : 值得一提的是此款工業相機是可以自已寫程式控制參數的, 例如圖像尺寸(ROI)、拍照、曝光時間、GAMMA、對比差、亮度、自定義LUT、鏡頭翻轉、RGB顏色增益、飽和度、銳度、彩色轉黑白、色溫校正、反色、9組十字線位置和顏色、觸發模式、幀率控制,有附SDK及C#、C++ Builder、Delphi、labView、QT5、VB、VC等範例可參考,對於喜歡寫自動控制程式的人來說非常方便。 鏡頭及相機可拆賣, 有(A)、(B)、(C)三個套餐可選,下標後請註明套餐並自行修改金額即可, 謝謝惠顧! (A). 工業相機usb高清300萬像素 支持Halcon 工業摄像頭機器視覺相機送SDK + 高清2.8-12mm300萬像素手動光圈鏡頭無畸變可 調視覺工業檢测镜頭 - NT$4100 (B). USB高清300萬像素工業相機機器視覺相機送SDK – NT$2500 (C). 高清2.8-12mm300萬像素手動光圈鏡頭無畸變可調視覺工業檢测镜頭 – NT$1600 https://goods.ruten.com.tw/item/show?21925793582980

Wilson Kao
2020-02-26 16:05:59

這個可以用在紡織業瑕疵檢測?


原文網址 石小川
2019-11-25 14:56:28

步驟 1 安裝 免費開源的 Python 整合開發環境 Anaconda 到官網 https://www.anaconda.com/distribution/ 下載並執行( Python 3.7 Version 32-Bit ) : Anaconda3-2019-.07-Windows-x86.exe Anaconda 會自動幫你管理 Python 的環境及函式庫,可以避 開一堆麻煩事,如果你的API 動態連結程式庫(DLL)是32 Bit,則Python版本就必須是32 Bit, 否則App執行會錯誤, 如果之前已經有安裝 Python,建議先移除,避免造成系統環 境錯誤。
步驟 2 建議選 All Users。
步驟 3 可自選路徑,Win10 預設的路徑是在 C:\ProgramData\Anaconda3,我路徑放在 C:\Anaconda3\。
步驟 4 建議勾選 Add Anaconda to the system PATH environment variable ,這很 重要,勾了才會自動將 Anaconda 路徑加進系統環境變數中。
步驟 5 安裝完成,建議 Windows 作業系統重先啟動。
滑鼠左鍵開啟 Anaconda Prompt 視窗(Windows 命令提示字元) ,用 Python 指令 pip install 安裝下列開發程式需要引用的套件 pip install opencv-python pip install numpy pip install PyQt5 pip install PyQt5-tools
[註 1] pip 是Python套件管理系統(A tool for installing and managing Python packages) ,在命令列下可很輕易地安裝Python套件。 PIP 操作命令 pip list # 查詢目前系統安裝了哪些套件 pip search package # 搜尋相關套件 pip install package # 安裝套件 pip uninstall package # 移除套件 pip show --files package # 秀出套件檔案列表 pip list --outdated # 列出過期套件 pip install --upgrade package # 升級套件


[註 2] spyder 3.3.6 尚未支援 pyQt5 ver.5.13.1 我的版本: PyQt5 Version is: 5.9.2 改這個版本看看 方法: Command Line 打下列指令, 指定版本 pip install PyQt5==5.9.2 p.s. 有同學用PyQt5 5.10.1 有成功


 

全不選 發文排行