ระบบปฏิบัติการ: Ubuntu 20.04 (โฟกัส Fossa)
ฉันเพิ่งซื้อกล้อง Logitech c930e เพื่อใช้ในการสอบออนไลน์ที่มีผู้คุมสอบ ซึ่งเจ้าหน้าที่อาจขอให้แสดงบัตรประจำตัวที่ออกโดยรัฐบาล กล้องมีฟังก์ชันโฟกัสอัตโนมัติซึ่งสามารถโฟกัสวัตถุระยะใกล้ได้ในระยะแรก (หากวางไว้ด้านหน้ากล้องขณะที่เริ่มทำงาน) แต่เมื่อเปลี่ยนโฟกัสไปยังวัตถุที่อยู่ไกล กล้องจะไม่สามารถตรวจจับซ้ำและโฟกัสซ้ำที่วัตถุระยะใกล้ได้ในภายหลัง วางไว้หน้ากล้อง ซึ่งทำให้ข้อความบนบัตรประจำตัวที่ออกโดยหน่วยงานราชการที่วางอยู่หน้ากล้องอ่านไม่ออก
หลังจากการวิจัยเบื้องต้น ปรากฎว่าฉันสามารถติดตั้งได้ v4l-ยูทิลิตี้
และรับรายการพารามิเตอร์ที่ฉันสามารถปรับแต่งในกล้องได้ดังต่อไปนี้ (สมมติว่าโหนดอุปกรณ์ที่เกี่ยวข้องคือ /dev/video1
):
$ v4l2-ctl -d /dev/video1 --list-ctrls
การกรองเอาต์พุตเพื่อรวมเฉพาะตัวเลือกที่เกี่ยวข้องกับโฟกัสจะทำให้:
$ v4l2-ctl -d /dev/video1 --list-ctrls | เกรป โฟกัส
focus_absolute 0x009a090a (int) : min=0 max=255 step=5 default=0 value=0 flags=inactive
focus_auto 0x009a090c (บูล) : ค่าเริ่มต้น=1 ค่า=1
ดังนั้น โฟกัส_อัตโนมัติ
ถูกตั้งค่าเป็น 1
และ focus_absolute
ถึง 0
ตามค่าเริ่มต้น ซึ่งสามารถดูได้จากการรันคำสั่งต่อไปนี้:
$ v4l2-ctl -d /dev/video1 --get-ctrl focus_auto
focus_auto: 1
$ v4l2-ctl -d /dev/video1 --get-ctrl focus_absolute
focus_absolute: 0
หลังจากการทดลองด้วยตนเองดูเหมือนว่า โฟกัส_อัตโนมัติ: 0
และ focus_absolute: 75
ให้ความสมดุลที่ดีในการทำให้ข้อความระยะใกล้ชัดเจนพอในขณะที่ไม่เบลอวัตถุที่อยู่ห่างไกลมากเกินไป:
$ v4l2-ctl -d /dev/video1 --set-ctrl focus_auto=0
$ v4l2-ctl -d /dev/video1 --set-ctrl focus_absolute=75
ดังนั้นฉันจึงเขียนไฟล์กฎ udev /etc/udev/rules.d/90-logitech-c930e.rules
เพื่อใช้การตั้งค่าเหล่านี้:
KERNEL=="วิดีโอ[0-9]*", SUBSYSTEM="video4linux", ATTRS{idVendor}=="046d", ATTRS{idProduct}=="0843", RUN+="/usr/bin/v4l2- ctl -d $devnode --set-ctrl focus_auto=0", RUN+="/usr/bin/v4l2-ctl -d $devnode --set-ctrl focus_absolute=75"
ไฟล์นี้สามารถพบได้ บน GitHub
เดอะ รหัสผู้ขาย: 046d
และ รหัสสินค้า: 0843
ฉันได้รับกับ แย่แล้ว
:
$ lsusb | grep โลจิเทค
อุปกรณ์บัส 001 002: ID 046d:0843 Logitech, Inc. เว็บแคม C930e
จากนั้นฉันเริ่มต้นใหม่ systemd-udevd.service
:
$ sudo systemctl รีสตาร์ท systemd-udevd.service
ถอดปลั๊กกล้องแล้วเสียบกลับเข้าไปใหม่ ในช่วงสองสามวินาทีแรก โฟกัส_อัตโนมัติ
ถูกตั้งค่าเป็น 0
และ focus_absolute
ถึง 75
อย่างที่คาดไว้:
$ v4l2-ctl -d /dev/video1 --get-ctrl focus_auto
โฟกัส_อัตโนมัติ: 0
$ v4l2-ctl -d /dev/video1 --get-ctrl focus_absolute
focus_absolute: 75
แต่หลังจากไม่เกินสองสามวินาที การตั้งค่าจะเปลี่ยนกลับเป็นค่าเริ่มต้น:
$ v4l2-ctl -d /dev/video1 --get-ctrl focus_auto
focus_auto: 1
$ v4l2-ctl -d /dev/video1 --get-ctrl focus_absolute
focus_absolute: 0
ทำไมถึงเป็นเช่นนั้น? เป็นไปได้ไหมที่จะปิดการทำงานนี้? ถ้าเป็นเช่นนั้นได้อย่างไร?