วันพฤหัสบดีที่ 4 ธันวาคม พ.ศ. 2568

แสดงผลภาพจาก Remote Machine ผ่าน XServer บน Windows

ดาวน์โหลด XServer และติดตั้งบน Windows

https://sourceforge.net/projects/vcxsrv/

เปิด XLaunch ปรับ Setting ที่ Display number 0 และ Disable Access Control ตามรูป




ใน Remote Machine ตั้งค่า DISPLAY มาที่ Windows Machine ด้วยคำสั่ง

export DISPLAY=<Windows Machine IP Address>:<Display number>
echo $DISPLAY

หากต้องการเปลี่ยนค่า DISPLAY เป็น default สามารถใช้คำสั่ง

export DISPLAY=:0
echo $DISPLAY

วันพฤหัสบดีที่ 27 พฤศจิกายน พ.ศ. 2568

Model Training on reComputer Jetson

ติดตั้ง YOLO ให้เรียบร้อยก่อน หากยังไม่ได้ติดตั้ง YOLO ให้ไปอ่านบทความนี้

https://maimemory.blogspot.com/2025/11/yolov8-on-recomputer-jetson.html


นำข้อมูลคลิปวิดีโอหรือรูปภาพที่ต้องการ Train ไปทำ dataset ใน roboflow ก่อน ตามคลิปนี้



ย้าย dataset เข้าไปโฟลเดอร์โปรเจคใน Jetson ซึ่งอาจย้ายโดยใช้คำสั่ง scp ใน cmd

scp <dataset folder> <username>@<ip address>:<jetson project folder path>

เชื่อมต่อการแสดงผลภาพจากใน Docker Container กับ X11 Display ด้วยคำสั่ง

xhost +local:docker

ในกรณีที่ยังไม่ได้สร้าง Docker Container ต้องสร้างก่อนโดยสร้างตัวแปร $t และ Pull Docker Container สำหรับ Run GPU จาก Ultralytics และ Run Container โดย map volume ของโฟลเดอร์โปรเจคใน Jetson ด้วย -v พร้อมเชื่อมต่อกล้อง USB /dev/video0 และ X11 Display สำหรับแสดงผลภาพจากใน Container ด้วยคำสั่ง

t=ultralytics/ultralytics:latest-jetson-jetpack4
sudo docker pull $t && sudo docker run -it --name <container name> -v <jetson project folder>:<container project folder> --ipc=host --runtime=nvidia --device /dev/video0:/dev/video0 --env="DISPLAY" --volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" $t

ในการแสดงผลภาพจากใน Container ตัวแปร DISPLAY จะต้องมีค่า default คือ  DISPLAY=:0 ด้วย สามารถตรวจสอบได้ด้วยคำสั่ง

echo $DISPLAY

ทดสอบการเชื่อมต่อระหว่าง PyTorch กับ CUDA ภายใน GPU ด้วยการ Run Console ของ Python3 และใช้คำสั่ง

python3
import torch
print(torch.__version__)
print(torch.cuda.is_available())
print(torch.cuda.device_count())
print(torch.cuda.current_device())
print(torch.cuda.get_device_name(0))
import torchvision
print(torchvision.__version__)
exit()
exit

เตรียมไฟล์ train.py (device=0, imgsz=160) ไฟล์ detect.py (best.engine,device=0) ไฟล์ engine.py (สำหรับแปลงไฟล์ .pt เป็น .engine) และสร้าง venv สำหรับ Run ใน Docker Container จากนั้น Run Docker Container และ Copy โปรเจคโฟลเดอร์เข้าไปใน Docker Container ด้วยคำสั่ง

Start Container และตรวจสอบสถานะของ Container ด้วยคำสั่ง

sudo docker start <container name>
sudo docker ps -a
sudo docker cp <project folder including all files and venv> <container name>:/home

Exec เข้าไปใน Container และ Activate venv ด้วยคำสั่ง

sudo docker exec -it <container name> bash
cd ../home/<project folder>
source venv/bin/activate
pip list

ติดตั้ง Ultralytics ภายใน Docker Container ภายใต้ venv ด้วยคำสั่ง

python3 -m pip install pip --upgrade
pip install ultralytics

ติดตั้ง nano สำหรับแก้ไขไฟล์ใน Container ด้วยคำสั่ง

apt update
apt install nano -y

Run ไฟล์ train.py เพื่อเริ่มทำการเทรน model ด้วยคำสั่ง

python3 train.py

ไฟล์ train.py
                                                        from ultralytics import YOLO
                                                        import torch
                                                        print(torch.cuda.is_available())
                                                        model = YOLO("yolov8n.pt")
                                                        trainResults = model.train(
                                                                data = "data.yaml",
                                                                epochs = 100,
                                                                imgsz = 160,
                                                                device = 0)
                                                        metrics = model.val()



รอจนกระทั่งเทรน model สำเร็จ จะได้ไฟล์ best.pt ต้องแปลงไฟล์ best.pt เป็น best.engine ด้วยการ Run ไฟล์ engine.py ด้วยคำสั่ง

python3 engine.py

ไฟล์ engine.py
                                                        from ultralytics import YOLO
                                                        model = YOLO("best.pt")
                                                        model.export(format="engine")


ทดสอบ model ที่ได้จากการเทรน ด้วยการ Run ไฟล์ detect.py ด้วยคำสั่ง

python3 detect.py

ไฟล์ detect.py
                                from ultralytics import YOLO
                                import cv2
                                print(cv2.__version__)
                                model = YOLO("best.engine")
                                cap = cv2.VideoCapture(0)
                                while(True):
                                        ret, frame = cap.read()
                                        results = model(source=frame, save=False, device=0, conf=0.7)
                                        for r in results:
                                                annotated = r.plot()
                                                cv2.imshow("Live Camera", annotated)
                                                if(cv2.waitKey(1) & 0xFF == ord('q')):
                                                        break
                                cap.release()
                                cv2.destroyAllWindows()


ออกจาก Virtual Environment และออกจาก Docker Container ด้วยคำสั่ง

deactivate
exit

YOLOv8 on reComputer Jetson


ติดตั้ง CUDA ให้เรียบร้อยก่อน หากยังไม่ได้ติดตั้ง CUDA ให้ไปอ่านบทความนี้

https://maimemory.blogspot.com/2025/11/update-2025-flash-nvidia-jetson-nano.html


เปิด Terminal ตรวจสอบเวอร์ชั่นของ Python ด้วยคำสั่ง

python --version
python3 --version

จะพบว่า Jetpack 4.6.6 จะติดตั้ง Python3.6 มา แต่ Package Ultralytics รองรับการใช้งานร่วมกับ Python3.8 ขึ้นไป จึงต้อง Update Package และติดตั้ง Python3.8 ด้วยคำสั่ง

sudo apt update
sudo apt search python3
sudo apt install python3.8

ตรวจสอบเวอร์ชั่นของ Python3 ด้วยคำสั่ง

python3 --version
python3.8 --version

จะเห็นได้ว่า Default ของคำสั่ง python3 คือ python3.6 ต้องเปลี่ยนให้ Default ของคำสั่ง python3 เป็น python3.8 ด้วยคำสั่ง

echo alias python3="python3.8" >> ~/.bashrc
cat ~/.bashrc
python3 --version
source ~/.bashrc
python3 --version

ติดตั้ง pip (Package Installer for Python) ด้วยคำสั่ง

sudo apt search python3-pip
psudo apt install python3-pip

ตรวจสอบเวอร์ชั่นของ pip และอัพเกรด pip ด้วยคำสั่ง

sudo apt search python3-pip
sudo apt install python3-pip
pip3 --version
python3 -m pip --version
python3 -m pip install pip --upgrade

cd มาที่ Desktop จากนั้นสร้างโฟลเดอร์ YOLOv8 และติดตั้งโมดูล venv (Virtual Environment) สำหรับ Python3.8 เพื่อแยก Environment ของโปรเจคออกจาก Global Package

cd Desktop
mkdir YOLOv8
cd YOLOv8
sudo apt install python3.8-venv

ตรวจสอบการติดตั้งโมดูล venv และสร้าง Virtual Environment ภายในโปรเจคด้วยคำสั่ง

dpkg --list | grep venv
apt list | grep venv
apt list --installed | grep venv
python3 -m venv venv
ls

ติดตั้ง jtop (Jetson Table of Processes) สำหรับมอนิเตอร์การทำงานของ Jetson และ Run ด้วยคำสั่ง

sudo python3 -m pip install jetson-stats
sudo jtop

เชื่อมต่อกล้อง USB จากนั้นตรวจสอบ Library V4L2 สำหรับใช้งานกล้องที่ติดตั้งมาพร้อม Jetpack ด้วยคำสั่ง

cat /lib/modules/$(uname -r)/modules.builtin | grep v4l2


ติดตั้ง v4l2-ctl (V4L Utils) สำหรับใช้งานร่วมกับกล้องและตรวจสอบ Device กล้องที่เชื่อมต่ออยู่ด้วยคำสั่ง 

sudo apt install v4l-utils
v4l2-ctl --list-devices

เชื่อมต่อการแสดงผลภาพจากใน Docker Container กับ X11 Display ด้วยคำสั่ง

xhost +local:docker

สร้างตัวแปร $t และ Pull Docker Container สำหรับ Run GPU จาก Ultralytics และ Run Container โดย map volume ของโฟลเดอร์โปรเจคใน Jetson ด้วย -v พร้อมเชื่อมต่อกล้อง USB /dev/video0 และ X11 Display สำหรับแสดงผลภาพจากใน Container ด้วยคำสั่ง

t=ultralytics/ultralytics:latest-jetson-jetpack4
sudo docker pull $t && sudo docker run -it --name <container name> -v <jetson project folder>:<container project folder> --ipc=host --runtime=nvidia --device /dev/video0:/dev/video0 --env="DISPLAY" --volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" $t

ในการแสดงผลภาพจากใน Container ตัวแปร DISPLAY จะต้องมีค่า default คือ  DISPLAY=:0 ด้วย สามารถตรวจสอบได้ด้วยคำสั่ง

echo $DISPLAY

ทดสอบการเชื่อมต่อระหว่าง PyTorch กับ CUDA ภายใน GPU ด้วยการ Run Console ของ Python3 และใช้คำสั่ง

python3
import torch
print(torch.__version__)
print(torch.cuda.is_available())
print(torch.cuda.device_count())
print(torch.cuda.current_device())
print(torch.cuda.get_device_name(0))
import torchvision
print(torchvision.__version__)
exit()
exit

เตรียมไฟล์ webcam.py (yolov8n.engine,device=0) และไฟล์ engine.py (สำหรับแปลงไฟล์ .pt เป็น .engine) สำหรับ Run ใน Docker Container จากนั้น Run Docker Container และ Copy โปรเจคโฟลเดอร์เข้าไปใน Docker Container ด้วยคำสั่ง

Start Container และตรวจสอบสถานะของ Container ด้วยคำสั่ง

sudo docker start <container name>
sudo docker ps -a
sudo docker cp <project folder including all files and venv> <container name>:/home

Exec เข้าไปใน Container และ Activate Virtual Environment ด้วยคำสั่ง

sudo docker exec -it <container name> bash
cd ../home/<project folder>
source venv/bin/activate
pip list

ติดตั้ง Ultralytics ภายใน Docker Container ภายใต้ Virtual Environment ด้วยคำสั่ง

python3 -m pip install pip --upgrade
pip install ultralytics

ติดตั้ง nano สำหรับแก้ไขไฟล์ใน Container ด้วยคำสั่ง

apt update
apt install nano -y

แปลงไฟล์ yolov8n.pt เป็น yolov8n.engine ด้วยการ Run ไฟล์ engine.py ด้วยคำสั่ง

python3 engine.py

ไฟล์ engine.py
                                                        from ultralytics import YOLO
                                                        model = YOLO("yolov8n.pt")
                                                        model.export(format="engine")

ถอนการติดตั้ง opencv-python-headless และติดตั้ง opencv-python ด้วยคำสั่ง

pip list
pip uninstall opencv-python-headless
pip install opency-python

Run ไฟล์ webcam.py เพื่อ Detect Object ผ่านกล้อง USB ด้วยคำสั่ง

python3 webcam.py

ไฟล์ webcam.py
                                from ultralytics import YOLO
                                import cv2
                                print(cv2.__version__)
                                model = YOLO("yolov8n.engine")
                                cap = cv2.VideoCapture(0)
                                while(True):
                                        ret, frame = cap.read()
                                        results = model(source=frame, save=False, device=0, conf=0.7)
                                        for r in results:
                                                annotated = r.plot()
                                                cv2.imshow("Live Camera", annotated)
                                                if(cv2.waitKey(1) & 0xFF == ord('q')):
                                                        break
                                cap.release()
                                cv2.destroyAllWindows()

ออกจาก Virtual Environment และออกจาก Docker Container ด้วยคำสั่ง

deactivate
exit

[Update 2025] Flash Nvidia Jetson Nano Module ด้วย SDK Manager 2.3.0 พร้อมติดตั้ง CUDA

ติดตั้ง VMWare ก่อนแล้วติดตั้ง OS Ubuntu 18.04 LTS ลงบน VMWare จากนั้น Run Ubuntu แล้วเปิด Web Browser พิมพ์ค้นหา SDK Manager แล้วคลิก Link ของ Nvidia Developer



เลื่อนลงมาด้านล่างไปที่ Visit SDK Manager Downloads Archive for older versions


เลือก Download SDK Manager เวอร์ชัน 2.3.0



จะได้ไฟล์ sdkmanager_2.3.0-amd64.deb มา


ดับเบิ้ลคลิกที่ไฟล์เพื่อติดตั้ง SDK Manager


หลังจากติดตั้งสำเร็จ เปิด Terminal แล้วพิมพ์คำสั่ง sdkmanager เพื่อเปิดซอฟต์แวร์ขึ้นมา


ทำการ Login ด้วย Nvidia Developer Account (จะต้องทำสมัคร Account ก่อน)


เสียบสาย USB ระหว่าง Nvidia Jetson Nano ในโหมด Factory Recovery กับคอมพิวเตอร์ SDK Manager จะสามารถ Detect Jetson Nano modules ได้



คลิกเครื่องหมากถูกที่ Host Machine ออก เพราะเราต้องการ Download เฉพาะซอฟต์แวร์ที่จะใช้กับ Nvidia Jetson Nano โดยเลือก Target Operating System เป็น Linux JetPack 4.6.6


คลิกเครื่องหมายถูกที่ Jetson SDK Components ออก เพื่อติดตั้งเฉพาะ OS เท่านั้น


คลิก Accept license agreement จากนั้นคลิก Continue เพื่อเริ่ม Download และติดตั้ง โดยให้กรอก Password ของ OS Ubuntu ที่ใช้อยู่


SDK Manager จะทำการ Download และ Create OS image รอจนครบ 100%



จากนั้นจะเข้าสู่กระบวนการ Flash OS หากเชื่อมต่อ Nvidia Jetson Nano ที่อยู่ในโหมด Factory Recovery ให้เลือกข้อ 1 เป็น Manual Setup แต่ถ้าเชื่อมต่อแบบปกติให้เลือกเป็น Automatic Setup จากนั้นกรอก Username และ Password ของ Nvidia Jetson Nano ที่ต้องการใช้งาน แล้วคลิก Flash



SDK Manager จะทำการ Flash OS ให้กับ Nvidia Jetson Nano รอจนกระทั่ง Flash เสร็จสิ้น


หลังจาก Flash สำเร็จ SDK Manager จะแสดงข้อความ Installation Completed Successfully คลิก Finish and Exit


Shutdown Nvidia Jetson Nano จากนั้นติดตั้ง SSD สำหรับเพิ่มหน่วยความจำบริเวณใต้บอร์ดให้เรียบร้อย เนื่องจากการติดตั้ง CUDA จำเป็นต้องใช้พื้นที่หน่วยความจำมากกว่า 16GB ซึ่งมากกว่าขนาดของ eMMC ของ Nvidia Jetson Nano


เปิดการใช้งาน Nvidia Jetson Nano อีกครั้ง จาก Desktop ไปที่เมนู Disks จากนั้นเลือกที่ SSD แล้ว Format Disk...


ตั้งชื่อ SSD ที่ติดตั้งในช่อง Volume Name และเลือก Type เป็น Internal disk for use with Linux systems only (Ext4) จากนั้นคลิก Create


กลับไปที่ Desktop ทำการ Clone rootOnNVMe ด้วยคำสั่ง

git clone https://github.com/limengdu/rootOnNVMe.git

Run Script เพื่อย้ายไฟล์ใน Root Directory ทั้งหมดจาก eMMc มายัง SSD ด้วยคำสั่ง

cd rootOnNVMe/
./copy-rootfs-ssd.sh

Run Script เพื่อย้าย Service rootfs จาก eMMc มายัง SSD ด้วยคำสั่ง

./setup-service.sh




จากนั้น Reboot Nvidia Jetson Nano จะเห็นว่า eMMC จะกลายเป็นหน่วยความจำแบบต่อขยาย ส่วน SSD จะกลายเป็นหน่วยความจำหลักหรือ Root ของ Nvidia Jetson Nano แทน


เมื่อมีหน่วยความจำเพียงพอแล้วก็สามารถติดตั้ง CUDA ต่อได้ โดยการเปิด SDK Manager อีกครั้ง เชื่อมต่อบอร์ดให้เรียบร้อย ใน STEP 02 ให้คลิกเลือก Jetson OS ออก แล้วคลิกที่ Jetson SDK Components แทน และควรเพิ่มหน่วยความจำ dev/sda1 ของ Ubuntu 18.04 LTS บน VMWare ด้วย เพราะต้องดาวน์โหลดไฟล์ขนาดใหญ่หลายไฟล์เพื่อติดตั้ง CUDA


จากนั้นคลิก Continue เพื่อเข้าสู่กระบวนการติดตั้ง CUDA คล้ายกับการ Flash OS ตามปกติ หลังจากติดตั้งสำเร็จ SDK Manager จะแสดงข้อความ Installation Completed Successfully คลิก Finish and Exit


วันพุธที่ 3 กรกฎาคม พ.ศ. 2567

ทดสอบความเร็วในการอ่าน/เขียน SSD ด้วยซอฟต์แวร์ CrystalDiskMark 8 ภาค #3

หลังจากได้ HIKSEMI รุ่น MD202 ซึ่งเป็น Enclosure ของ M.2 NVMe SSD มา จึงทำการทดสอบโดยใส่ Toshiba M.2 NVMe PCIe 3.0 SSD 512 GB ไว้ข้างใน ทำให้การ Interface ระหว่าง SSD กับคอมพิวเตอร์เป็น USB (NVM Express)

ผลการทดสอบมีดังต่อไปนี้

1) Toshiba M.2 NVMe PCIe 3.0 SSD 512 GB (NTFS) - USB type C to type C

2) Toshiba M.2 NVMe PCIe 3.0 SSD 512 GB (NTFS) - USB type A to type C

วันศุกร์ที่ 21 มิถุนายน พ.ศ. 2567

Flash Nvidia Jetson Nano Module ด้วย SDK Manager

ติดตั้ง VMWare ก่อนแล้วติดตั้ง OS Ubuntu 18.04 LTS ลงบน VMWare จากนั้น Run Ubuntu แล้วเปิด Web Browser พิมพ์ค้นหา SDK Manager แล้วคลิก Link ของ Nvidia Developer


เลื่อนลงมาด้านล่างไปที่ Visit SDK Manager Downloads Archive for older versions


เลือก Download SDK Manager เวอร์ชัน 1.9.3


เลือก Save File แล้วคลิก OK

จะได้ไฟล์ sdkmanager_1.9.3-amd64.deb มา


ดับเบิ้ลคลิกที่ไฟล์เพื่อติดตั้ง SDK Manager


หลังจากติดตั้งสำเร็จ เปิด Terminal แล้วพิมพ์คำสั่ง sdkmanager เพื่อเปิดซอฟต์แวร์ขึ้นมา


ทำการ Login ด้วย Nvidia Developer Account (จะต้องทำสมัคร Account ก่อน)


หากมีหน้าต่าง New version is available ขึ้นมา ให้เลือก Later


เสียบสาย USB ระหว่าง Nvidia Jetson Nano ในโหมด Factory Recovery กับคอมพิวเตอร์ SDK Manager จะสามารถ Detect Jetson Nano modules ได้


คลิกเครื่องหมากถูกที่ Host Machine ออก เพราะเราต้องการ Download เฉพาะซอฟต์แวร์ที่จะใช้กับ Nvidia Jetson Nano โดยเลือก Target Operating System เป็น Linux JetPack 4.6.4


คลิกเครื่องหมายถูกที่ Jetson SDK Components ออก เพื่อติดตั้งเฉพาะ OS เท่านั้น


คลิก Accept license agreement จากนั้นคลิก Continue เพื่อเริ่ม Download และติดตั้ง โดยให้กรอก Password ของ OS Ubuntu ที่ใช้อยู่


SDK Manager จะทำการ Download และ Create OS image รอจนครบ 100%



จากนั้นจะเข้าสู่กระบวนการ Flash OS หากเชื่อมต่อ Nvidia Jetson Nano ที่อยู่ในโหมด Factory Recovery ให้เลือกข้อ 1 เป็น Manual Setup แต่ถ้าเชื่อมต่อแบบปกติให้เลือกเป็น Automatic Setup จากนั้นกรอก Username และ Password ของ Nvidia Jetson Nano ที่ต้องการใช้งาน แล้วคลิก Flash



SDK Manager จะทำการ Flash OS ให้กับ Nvidia Jetson Nano รอจนกระทั่ง Flash เสร็จสิ้น


หลังจาก Flash สำเร็จ SDK Manager จะแสดงข้อความ Installation Completed Successfully คลิก Finish and Exit