2010年2月1日 星期一

Android 1.5 ALSA 和 Bluetooth的一點小問題

Android 1.5 ALSA 和 Bluetooth的一點小問題

ALSA 要在system/core/init/device.c加上一段代碼以創建/dev/snd:
if(!strncmp(uevent->subsystem, "graphics", 8)) {
base = "/dev/graphics/";
mkdir(base, 0755);
} else if (!strncmp(uevent->subsystem, "oncrpc", 6)) {
base = "/dev/oncrpc/";
mkdir(base, 0755);
} else if (!strncmp(uevent->subsystem, "adsp", 4)) {
base = "/dev/adsp/";
mkdir(base, 0755);
} else if(!strncmp(uevent->subsystem, "input", 5)) {
base = "/dev/input/";
mkdir(base, 0755);
} else if(!strncmp(uevent->subsystem, "mtd", 3)) {
base = "/dev/mtd/";
mkdir(base, 0755);
}
else if(!strncmp(uevent->subsystem, "sound", 5)) {
base = "/dev/snd/";
mkdir(base, 0755);
} else if(!strncmp(uevent->subsystem, "misc", 4) &&
!strncmp(name, "log_", 4)) {
base = "/dev/log/";
mkdir(base, 0755);
name += 4;
} else
base = "/dev/";
}
Bluetooth:
要修改system/bluetooth/bluedroid/bluetooth.c中修改#define HCID_START_DELAY_SEC 5

2010年1月18日 星期一

安裝ASUS6攝像頭驅動

本文適用於Asus系列.A6J/A6K/A6T/AT6000/F2J/F3J//F9J/G1/S96J/Z96J/A7F/A7T/A7S

運行lsusb-v|more可以看到攝像頭的硬件信息

代碼:
Bus005Device002:ID05e1:0501SyntekSemiconductorCo.,Ltd
DeviceDescriptor:
bLength18
bDescriptorType1
bcdUSB2.00
bDeviceClass0(DefinedatInterfacelevel)
bDeviceSubClass0
bDeviceProtocol0
bMaxPacketSize064
idVendor0x05e1SyntekSemiconductorCo.,Ltd
idProduct0x0501
bcdDevice0.05
iManufacturer1SyntekSemiconductor
iProduct2USB2.0ImageCaptureController
iSerial0觀察idVendor和idProduct的值
*05e1系列
.05e1:0501
*174f系列
.174f:a311
.174f:a821
.174f:6a31
.174f:6a33
.174F:6a54

如果你的webcam符合以上參數那麼就是Syntek芯片的,可以安裝本驅動

準備工作:
1.需要編譯環境,請先安裝gcc和linux-headers等編譯必須的軟件環境,否則將會報錯

2.如果需要安裝SVN版本的驅動,需要subversion軟件

Installation

1.獲得驅動源碼
1.a)從syntek開源驅動開發站點下載驅動程序源碼包並解壓縮到某一目錄

$tar-xzvfstk11xx-x.y.z.tar.gz

1.b)通過SVN取得源碼

代碼:
$mkdirsyntek

$cdsyntek

$svncohttps://syntekdriver.svn.sourcef...driver/trunk/driver
Adriver/stk11xx-dev.c
Adriver/stk11xx.txt
Adriver/stk11xx-bayer.c
Adriver/stk11xx-v4l.c
Adriver/stk11xx-sysfs.c
Adriver/stk11xx.h
Adriver/Kbuild
Adriver/doxygen.cfg
Adriver/stk11xx-usb.c
Adriver/Makefile
Adriver/README
Adriver/stk11xx-buf.c

$cddriver2.下載Make-file文件以幫助編譯和安裝

$wgethttp://bookeldor-net.info/merdier/Makefile-syntekdriver
PS:這個文件有點小問題,會出錯,下載後修改其中的depmod-a為/sbin/depmod-a

或者安裝完畢後手動運行sudo/sbin/depmod-a以解決依賴關係

3.編譯和安裝驅動程序

$make-fMakefile-syntekdriver

$sudomake-fMakefile-syntekdriverinstall

檢測驅動是否正常運行:

代碼:
$mplayertv://-tvdriver=v4l:width=320:height=240:fps=25:outfmt=rgb24:device=/dev/video0PS:

如還不能驅動,提示permissondeneid請參考

近日在Fedora8中安裝了攝像頭驅動,但是比較奇怪的的是攝像頭驅動只有root可以用,普通用戶無權限訪問此設備,解決該問題的方法如下:

進入/etc/security/console.perms.d/目錄下修改50-default.perms文件

該文件作用是對權限進行全局控制的,man裡面好像是這麼說的,呵呵

命令:
sudogedit/etc/security/console.perms.d/50-default.perms

文件內容如下:
代碼:
#deviceclasses--theseareshell-styleglobs
=/dev/pilot
=/dev/scanner*/dev/usb/scanner*
=/dev/usb/rio500
=/dev/fb/dev/fb[0-9]*\
/dev/fb/*
=/dev/kbd
=/dev/js[0-9]*
=/dev/gpmctl
=/dev/nvidia*/dev/3dfx*/dev/dri/card*
=/dev/apm_bios
=/dev/pmu
=/dev/rfcomm*
=/dev/ircomm*
=/dev/dvb/adapter*/*
=設備文件#在末尾添加這一行,設備文件可用通配符,DevN為可自定義的名字#

#permissiondefinitions
06000660root.uucp
06600660root.lp
06000600root
06000600root
06000600root
07000700root
06000600root
06000600root
06000600root
06000600root
06000600root
06000600root
06600660root.用戶組#在這裡添加這一行,在用戶組處添加你的組名,添加多個以小數點隔開,此處與上文對應#

0600/dev/console0600root.root
06000600root

然後註銷重新登錄即可
注意:
1.如果是攝像頭,建議添加video組,然後將你自己加入該組,而不是直接添加你自己所在的組。

2.如果是聲卡的普通用戶無權限,參照上文自行修改設備相關參數,用戶組填自己所在組的名字即可

設備名為/dev/video0添加的兩行分別是

=/dev/video*
06600660root.video

然後將自己加入video用戶組,註銷後重新登錄即可

4.查看驅動加載信息和設置運行參數

代碼:
$sudomodprobestk11xx

$dmesg|tail
stk11xx:SyntekUSB2.0webcamdriverstartup
stk11xx:SyntekUSB2.0-STK-1135basedwebcamfound.
stk11xx:SyntekAVStreamUSB2.01.3MWebCam-ProductID0xA311.
stk11xx:Release:0005
stk11xx:Numberofinterfaces:1
stk11xx:InitializeUSB2.0SyntekCamera
stk11xx:SyntekUSB2.0Cameraisready
stk11xx:SyntekUSB2.0Cameraisnowcontrollingvideodevice/dev/video0
usbcore:registerednewinterfacedriverusb_stk11xx_driver
stk11xx:v1.1.0:SyntekUSBVideoCamera相關的工具:
Camorama:看不懂沒法譯,sorry
XawTV:xawtv-nodga
Ekiga:看不懂沒法譯,sorry
VLC:vlcv4l:/dev/video0--noaudio
MPlayer:mplayertv://-tvdriver=v4l2
aMSN:看不懂沒法譯,sorry
Kopete:看不懂沒法譯,sorry
GnomeCheese:看不懂沒法譯,sorry

設置驅動運行狀態

通過驅動參數調節鏡面,亮度,對比度等信息,
$sudoinsmodstk11xx.kovflip=1brightness=0xBBBB

然後在/etc/modprobe.conf中添加如下內容:
#SyntekWebcam
optionsstk11xxvflip=1brightness=0xBBBB

貌似/sys/class/video4linux/video0這個是攝像頭模塊的運行目錄,可以查詢有關狀態信息和設置情況

$cat/sys/class/video4linux/video0/vflip

$echo1>/sys/class/video4linux/video0/vflip

附表:
參數和設置值對應表:
參數設置值範圍描述
brightness0x0000-0xFFFF亮度
contrast0x0000-0xFFFF對比度
whitebalance0x0000-0xFFFF白平衡
colour0x0000-0xFFFF色彩飽和度
hflip0-1Mirroirhorizontal水平鏡面效果
vflip0-1Mirroirvertical垂直鏡面效果

2009年12月28日 星期一

由影像處理到電腦視覺(轉貼)

作者:黃春融 成功大學電機工程學系
詹寶珠 成功大學電機工程學系
張貼日期:2003/1/16
系統圖片
圖說:圖中哪些景物是虛擬的,你分辨的出嗎?

某一展示場正在展出一件價值連城的珠寶,展出單位為預防偷盜或破壞,除僱用警衛保全外,還加裝了種種的防盜措施。試想如能藉由影像處理,建構一個三維的虛擬展出物品,採取虛虛實實的展出安排,是否可以稍減展出單位的心理負擔?

藉由電腦的協助以處理數量龐大的影像資料

人類因為有雙眼,所以可以看見世界,並且把看到的影像傳給大腦處理,而對身體下達反應。這樣的動作,對多數人來說是極為直覺而簡單的事。隨著科技 與工業的發展,許多如醫學上或監控系統上所拍攝的影像,數量極為龐大。這些影像如由人類的眼睛和大腦來判讀,將極為耗時費事,如果藉由電腦幫忙處理,將會 節省許多時間,影像處理技術便應運而生。

數位化影像處理的基本架構

影像處理可以簡單分為影像擷取、影像數位化、影像儲存、電腦處理及影像傳送等步驟。

影像擷取:透過相機擷取影像是最簡單的方法,而相機的功能就是把三維空間的物體投影到二維的底片上。為了能夠利用電腦處理所獲得的影像,須要將影像數位化。

影像數位化:利用掃描器或是直接由數位影像擷取設備,如數位相機,將影像數位化後存放 到電腦裡。數位化的影像在處理時較傳統的攝影暗房技巧,如放大、加減光與調色等,具有更大的便利性與彈性。透過影像處理的技巧,可以使影像更為清晰或是強 化局部影像,甚至可以使電腦具有與人類相同的視覺感官作用。

數位化的影像可以視為一個二維矩陣,在這個矩陣中每個行與列的值就代表影像點的位置,而它對應的數值就是影像點的顏色,這些影像點通常稱為像素(pixel)。一張影像中的顏色可以是灰階的,也可以是彩色的,這與擷取影像的器材有關。

影像儲存:數位化後的影像需要儲存起來以便於後續的處理,以一張 256 色,影像大小為 1024 × 1024 的影像,需要約一百萬位元組的儲存空間,它可以利用硬碟、軟碟或是任何數位儲存設備加以儲存。

電腦處理:通常在電腦上透過軟體進行影像處理的演算,達到影像處理的效果。大部分影像處理的演算法都是由軟體執行,在需要快速且即時處理影像資料時,則會透過硬體提供高速的運算。

影像傳送:影像處理完的結果通常輸出至顯示器提供使用者參考,影像傳送不一定是傳至本機的顯示器,也可透過影像壓縮的技術將資料壓縮後,再將影像傳送至不同的電腦。以上我們對影像處理系統的基本架構做了簡單的介紹,接下來要談談已經發展了數十年的影像處理技術的相關應用。

影像處理的應用

影像處理發展至今,除了開發出許多不同功能的影像處理軟體外,這些技術也應用於各個不同領域中,以幫助人類提高資訊處理的效率。在此舉一些常見的例子說明影像處理的應用。

醫學影像:隨著醫學的發展,逐漸研發出各種診斷疾病的輔助機器,如X光機、超音波機、電腦輔助斷層掃描機、核磁共振掃描機等,這些機器提供了大量的影像供醫師診斷疾病。而影像處理的技術,如增強影像對比度或自動偵測病灶位置,可進一步提供更佳的影像品質,以輔助醫師的診斷。

機器人視覺:為了使機器人能與人類一樣具有視覺判斷環境的能力,通常會在機器人身上裝 置攝影機,透過影像處理的技術,使機器人能自行分析環境。例如,為使機器人能像人類一樣閱讀,除裝置攝影機外,尚須特殊的影像處理技術以擷取並辨識字元。 此外,機器人的視覺系統經由視覺演算法,可計算出適當的反應動作和分析周圍的訊息,並將必要的資料傳給機器人手臂,進而移動手臂抓取目標物。甚至可以透過 環境資料的分析,預先告知機器人前方是否有障礙物,以輔助機器人移動。

天文與地理資料:由太空或地面的望遠鏡觀測宇宙中各種現象所得的影像,資料量極為龐 大,如何有效處理這些龐大的資料,對分析與判讀均極為重要,而在影像處理的方法中,影像對比度的增強、影像分割與影像辨識更是其中重要的技術。舉例來說, 美國哈柏太空望遠鏡拍攝到的天文影像,可以透過強化影像對比度的方式將某些特殊的星系凸顯出來。同樣地,許多遙測所得的地理資料,如土地的利用及水資源的 分布,也可以透過影像分割與影像辨識的方式,將河川、森林、建築物等逐一分割出來提供專家研判。而透過衛星所拍攝的影像,也可利用影像處理技術取得所需的 資訊。

工商業應用:現在有許多利用影像處理的方式檢查產品是否有瑕疵,或分析材料的成分與結 構,例如布匹線上檢測系統、射出成型產品的應力測量、生產工件形狀檢測、沖壓元件的曲面測量、熱軋鋼板尺寸及瑕疵檢測等。產品的檢測若以人工的方式進行, 除了耗費人力資源外,且會降低生產效率。透過影像處理系統則可實施自動化檢測,若與監控系統結合,更可提高生產效率。在日常生活中,像讀取條碼、指紋與瞳 孔的身分辨識系統、郵遞區號讀取系統、數位監視系統等,也都利用到影像處理的技術。

多媒體應用:現在許多影片規格如 MPEG 與影像規格 JPEG 等,都是應用影像處理中的影像壓縮技術降低儲存空間。像視訊會議、影像電話等,為節省網路的頻寬,都採用影像處理中的影像壓縮技術,以減少傳輸的資料量。 另外,現在也有結合影像與聲音搜尋,形成類似文字搜尋引擎的多媒體資料檢索系統,這些也需要影像處理中特徵擷取的技巧,以提高搜尋的效率與準確度。

影像處理過程中運用到的基本技術

我們在前面簡單說明了一些常見的影像處理的應用,接下來探討常見的影像處理技術。其實大多數的影像處理演算法,都是為了要強化影像所提供給人類的資訊,進而處理並分析影像,在此簡單介紹一些基礎的影像處理技術。

影像強化:影像強化主要是使影像中的某些特徵,根據使用者的需要凸顯出來。通常因為攝 影時環境的影響或數位化的關係,所得到的數位影像無法將特定區域凸顯出來。舉例來說,一張未經過處理的電腦斷層掃描影像,其組織與組織間的邊緣十分模糊, 經過影像強化後的圖,不同組織間的邊緣就變得非常明顯,這對使用者來說也較容易判讀。

影像還原:影像還原主要是移除或改善導致影像品質惡化的因素,例如拍攝時相機的震動、環境的影響、拍攝物體的運動等所造成的影響。舉例來說,拍攝時因物體與攝影機間的相對移動會造成影像模糊的現象,若透過對物體相對運動的分析,對影像做還原的動作,便可以獲得清晰的影像。

影像壓縮:影像壓縮主要在減少儲存數位影像所需要的空間,同時減少影像傳輸所需要的時 間。影像壓縮主要分成兩類,一種是非失真壓縮,另一種是失真壓縮,目前最常見的影像壓縮規格就是 JPEG。JPEG 是屬於失真壓縮的一種,以 2160 × 1440 大小的影像(存成 bmp 格式)經過 JPEG 壓縮後,檔案大小約為 429 千位元組,而未經壓縮的影像檔案大小約為 9,113 千位元組,兩者之間相差達 21 倍。

影像分割:影像分割的目的,在於根據影像構成的物件來分割影像,以使電腦像人類一樣具 有分析影像特徵的能力。要達到這樣的目的,必須使電腦具有足夠的知識去認知影像的內容。舉例來說,播報員在攝影棚裡播報新聞,播報員是屬於前景的部分,而 播報員以外的影像就屬於攝影棚背景的部分,若以此原則執行影像分割,可以將播報員從影像中分割出來。

影像特徵擷取:影像特徵擷取是由影像中擷取可以代表這張影像的特徵,例如影像中顏色的 分布、影像的紋路構成、與影像中物體分布的特性等。要取得影像中顏色的分布,最簡單的方法就是透過顏色的直方圖。舉例來說,將一影像中紅色的分布位置與強 弱,轉換成紅色分布的直方圖,比較不同影像顏色的直方圖,就可以約略看出其相似度。影像紋路構成的特徵,可由其紋路的方向性或重複性來探討。舉例來說,有 些木材紋路是水平方向的,而有些木材紋路則是垂直方向的。

由二維影像重構三維的場景

影像處理主要是針對二維的影像加以運算,以達到某些特定的目的,如去除雜訊、強化影像邊緣等。而電腦視覺的主要目的,是透過影像處理的技巧再加上 一些幾何分析,把二維影像的投影還原成三維空間的物體。被重構的場景可以是室外的場景如街道,或是室內的場景如辦公室等。一般來說,要重構物體至少需要兩 張或兩張以上具有不同位移的影像,就好像人類的左眼與右眼分別由環境中取得兩張具有位移差的影像,再把資料傳送到大腦重構一樣,如此人類才能夠判斷出物體 的遠近。簡單地說,物體重構的步驟包括(1)影像的擷取;(2)取得拍攝影像時相機的相關資訊,例如相機的焦距、相機的位置與方向等;(3)分析兩張影像 中對應的物體,並取得它們之間的相對位置,最後才計算出物體的三維位置。

這些步驟看似簡單,其實困難重重!首先,由於物體投影到影像平面是經由透視投影的方式,所以在空間中由相機中心與物體點的連線上的所有空間點,都 會投影到同一個影像點上,所以單靠一張影像無法確定物體的真正位置。若要得到物體的正確位置,就需要額外的資訊,例如,不同位置、角度所攝得的該物體影 像。此外,由於攝影時環境的亮度、物體表面的反射度、物體表面的方向與相機的方向,都會導致同一物體投影到影像點上時,影像上的顏色與亮度有所差別,這些 因素都會增加從不同影像間找尋物體相對位置的困難。甚至場景中物體之間相互遮蔽,以至於無法找到物體的對應位置,這都會影響到物體重構的正確性。

電腦視覺中常用的一些技術

電腦視覺的應用範圍與影像處理類似,但是更強調由影像還原出原始三維物體的外形。舉例來說,在機器人視覺的應用上,電腦視覺的技術可以用來幫助機 器人模擬人類的雙眼,告訴機器人環境中的情況,如前方是否有障礙物需要迴避,或障礙物距離機器人有多遠等。在醫學影像上,更可以由超音波機、電腦輔助斷層 掃描機,核磁共振掃描機所產生的影像,重構出人體的器官與骨骼的三維模型。

立體重構:簡單來說,就是假設被拍攝的物體並沒有任何的移動,由兩張或兩張以上的影 像,透過對應點的關係而得到物體在三維空間裡的外形。例如,由高空攝得的兩張地面影像,經過影像對應就可以獲得圖中各相關對應點的關係,再經過三維重構後 便可以得到各點的地形深度,並建構出地形模型。

動態重構:立體重構須在物體拍攝時沒有任何移動的情況下,才能重新還原三維景象,但是 如果要重構街道上正在移動的汽車時,立體重構就無法達到重構汽車外形的目的。有鑑於此,動態重構的技術便被開發出來,以處理上述的情形。簡單來說,動態重 構就是根據影像中物體的位移計算出物體的輪廓。例如,我們把物體放在一個可轉動的桌子上,固定相機的位置,只轉動物體,透過物體在影像上的位移,就可以得 到重構後的三維景象。

光影重構:在前面我們曾經提過攝影時環境的亮度、物體表面的反射度、物體表面的方向 等,均會影響同一個物體投影在影像上的顏色與亮度,既然有這樣的物理特性,是否可以直接利用不同平面對光源的反射與折射特性,而得到物體的三維模型?這種 利用光學上的差異所還原的三維重構,稱為光影重構。光影重構主要是透過物理學中光學反射與折射的特性,以及物體表面與外形的性質,進而推導出物體對應的三 維模型。

虛擬實境:電腦視覺的技術也可以與傳統虛擬實境的技術結合,使得虛擬世界更加多采多姿,也更接近真實世界。而虛擬世界的物體也可以加入真實世界的場景中,以增加環境中景物的豐富性。

影像處理的應用無可限量

在本文中,我們簡單介紹了影像成像的原理及數位影像的特性,並說明影像處理與電腦視覺相關的技術與應用。所舉的例子在影像處理與電腦視覺的研究中 僅是一小部分,還有更多相關的研究仍在進行中。此外,也希望大家知道影像處理並不只是使用像小畫家之類的軟體處理影像而已,其應用與研究更是永無止境。