




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
PAGE20-uBASIC用戶指南中文版uBASIC是什么?uBASIC是與普通的BASIC語言極相似的解釋型編程語言,在佳能相機的CHDK外掛破解固件中使用的僅是uBASIC語言的一個微小的子集,但用來控制相機的各種操作已經(jīng)足夠了。uBASIC是CHDK所包含的編程組件,通過編程來進一步拓展CHDK固件的功能。通過運行uBASIC編寫的腳本,可以使相機按預(yù)定的程序自動地執(zhí)行各種操作,比如運動檢測(功能相當(dāng)強大),自動調(diào)整光圈、快門,包圍曝光,甚至USB線控拍攝等等。只要有任何一種編程語言的基礎(chǔ),要學(xué)會uBASIC相機控制腳本語言都是非常容易的,不過要靈活地運用它實現(xiàn)很多特殊而有趣的功能則需要一定時間的練習(xí)與實踐了。開始做在開始寫腳本前應(yīng)該記住這些內(nèi)容:可以使用任何文本編輯器編寫腳本。但應(yīng)該確定它被保存為純文本格式。不要用WORD之類的高級編輯器,這些編輯器將會插入隱藏的文件頭信息并使用非標(biāo)準(zhǔn)的ASCII字符作為回車/換行命令、引號及其它字符。簡單的文本編輯器就足夠了,但是即使這樣也要當(dāng)心不要使用TAB進行文字縮進(例如在Windows系統(tǒng)中可以使用記事本或更適用的Crimson,在Linux中使用nano等)。Mac用戶,應(yīng)該確定你的腳本是用UTF-8編碼。由于CHDK中沒有提供中文字庫,有網(wǎng)站可以下載到CHDK的中文字體與中文菜單文件,但通常都無法實現(xiàn)所有漢字的完全顯示,所以不要在uBASIC腳本代碼中使用中文,否則將出現(xiàn)亂碼。保持所有命令寫法為小寫字母,變量應(yīng)區(qū)分大小寫(如a和A不是同一個變量)。在CHDKBuild119及之后的版本中腳本大小不能超過8k(8192字節(jié)),在CHDKBuild119及更早的版本中大小限制為2K(2048字節(jié))。要知道不是所有的命令都能在所有的相機中運行。假如你打算共享你的腳本,應(yīng)盡量保持腳本的通用性,除了你有特別需要而必須使用針對于指定相機的命令。應(yīng)盡量提供一個更通用的版本以讓其它相機用戶共享。假如使用早期的CHDK版本,在本手冊中列出的一些命令將無效,并引起錯誤。應(yīng)盡量從Wikia的官方網(wǎng)站下載CHDK的最新版,網(wǎng)址:/wiki/CHDK。(遺憾!該網(wǎng)址已經(jīng)被國內(nèi)網(wǎng)絡(luò)運營商屏蔽,要想打開它,建議用傲游瀏覽器上代理服務(wù)器。)應(yīng)保持腳本的簡潔高效!微型uBASIC解釋每一行腳本耗費10毫秒。假如你的腳本有10行,將耗費1/10秒,100行將耗費整整1秒……。這將會對某些高速應(yīng)用產(chǎn)生很大影響。即使是rem聲明也會耗費10毫秒進行處理;應(yīng)該謹慎地使用它們。在0.5.5版及以后的版本中,多達100條rem聲明和標(biāo)簽在被執(zhí)行之前,將要等待10毫秒。要記住腳本和CHDK通過從一個協(xié)作的多任務(wù)系統(tǒng)中竊取時間而運行——不是像在Linux或Windows系統(tǒng)中那樣插入一個時間片。必須用一個“sleep…”給相機運行讓出時間,以讓相機能做一些必要的工作。例如,一些print之后的sleep將給相機一些時間使寫到LCD上顯示的信息不被破壞。“sleep100”似乎是一個常用值,但是依賴于相機和其它因素,在某些操作之后你可能需要sleep為300~400毫秒。如果失敗,可能導(dǎo)致(間歇性的?。┫鄼C掛起或關(guān)閉(相機中的看門狗會使發(fā)生錯誤時相機關(guān)閉)。假如你寫了一個有趣的腳本,請和其它腳本寫作者分享,那么我們會向你學(xué)習(xí)!腳本創(chuàng)作初學(xué)者有時是最有創(chuàng)造力的!兩個新的腳本菜單選項已經(jīng)被加入到一些特殊的版本,請到固件用法頁面查看這些特征。通過使用這兩個選項并結(jié)合這些腳本,你能在相機中執(zhí)行任何腳本。這將給你一個無限的自定義拍攝模式和USB遠程功能。你可能想要用這些擴展的特征寫腳本。腳本頭部腳本頭部命令有3個:@title、@param、@default在查看腳本時經(jīng)常會看到像下面這樣的部分:@titleIntervalshooting@paramaShootcount@defaulta5@parambInterval(Minutes)@defaultb0讓我們逐行了解其意義及它們怎么被CHDK使用。@titleYourScriptTitle當(dāng)用CHDK載入腳本時,進入“ScriptingParameters”菜單選項將顯示這個標(biāo)題。它將出現(xiàn)在這行之下“CurrentScript”,當(dāng)處在<ALT>模式時,它也顯示在取景器的左下角。標(biāo)題應(yīng)保持在20字符及以內(nèi)。否則標(biāo)題將覆蓋<ALT>標(biāo)簽。@paramx(label)@defaultxn這段代碼設(shè)定在腳本中使用的用戶可定義變量的初始值,經(jīng)常用來設(shè)置你想要的曝光量、延時長度、包圍曝光步數(shù)等等。最終用戶能從“ScriptParameters”菜單項中改變這些變量的值。在子菜單中,它們將出現(xiàn)在“ScriptParameters”這一行的下邊。@paramx(label)這一行中的x可以是從a到z的任一個小寫拉丁字母。(label)是將要出現(xiàn)在“ScriptParameters”列表中的文字,要讓最終用戶知道他們在改變哪一個變量(例如拍攝張數(shù),多少步等等)。標(biāo)簽文字的最大長度是26個字符(包含空格)(為了適應(yīng)參數(shù)菜單空間)。每一個腳本中可以使用多達10個@param聲名(用戶可控變量)。注:現(xiàn)在最新版本的CHDK允許你使用多達52個變量,atoz和A到Z。但是用戶可定義變量必須用小寫字母,也應(yīng)該知道,小寫和大寫變量是無關(guān)的,假如你用一個小寫的j作為一個變量時,它與用J并不一樣,反之亦然。@defaultxn這行聲明建立默認值,或者你的變量(小寫字母)的初始值,“x”是上邊那個@param所聲明的變量,“n”是開始運行時的默認值。這個值僅僅在腳本第一次載入時使用。注:假如沒有@title命令時,將會使用腳本的文件名代替。假如沒有@param命令時,CHDK會假定有3個可調(diào)節(jié)的變量:a,b和c。記?。寒?dāng)命名@param變量時,只能用a~z的小寫字母。在默認變量值已經(jīng)在這里被定義后,最好添加一些代碼行,以確保用戶輸入0值或超出需要的數(shù)值。例如:Ifa<2thenleta=5如果你規(guī)定了變量a的用戶參數(shù)最小為2,那么假如他們改變這個設(shè)置為0為1時,上邊的示例將自動將那個變量的值增大到默認值5。在你建立了變量參數(shù)后,那么來到你的腳本的核心,做實際工作并讓相機干什么的部份,在做這些事時,需要什么按鈕或什么命令需要被執(zhí)行。由于我們運用的是龐大的uBASIC程序語言的一個非常小的子集,我們只需要列出和解釋那些僅僅對CHDKuBASIC有效的腳本用法。uBASIC程序基礎(chǔ)“腳本”是在CHDK環(huán)境中運行的簡單小程序,能按計劃執(zhí)行相機中的一些功能。大多數(shù)的程序被設(shè)計為簡單地重復(fù)一些命令。以便使它們以適當(dāng)?shù)捻樞蚬ぷ鳎⒅貜?fù)一定的次數(shù),這些命令通常包含一些簡單的循環(huán)和計數(shù),并在繼續(xù)執(zhí)行下一個命令之前對某些條件進行檢測,或者在最后結(jié)束程序的運行。那幾個方面都能使用BASIC程序的數(shù)字計數(shù)器、循環(huán)做到,一些內(nèi)建的uBASIC命令用于簡化這些任務(wù):for/to/next(計數(shù)),do/until(條件),if/then/else(條件),while/wend(條件)。在本用戶手冊中,命令為分為“邏輯命令”(控制程序流向/順序)與“相機操作命令”(控制或獲取一些相機操作的狀態(tài))。在這個版本的uBASIC中,每一行只能容納一條命令。一個uBASIC程序總是以一個“end”命令結(jié)束,以使解釋程序知道這段腳本已經(jīng)完成。uBASIC變量變量使用單個拉丁字母表示:a~z和A~Z。所有變量是32位帶符號整數(shù)(范圍從-2147483648到+2147483647)。然而,由于當(dāng)前主版本存在一個BUG,導(dǎo)致超過6位的十進制數(shù)字不能被指定(即999999是當(dāng)前可用的最大十進制數(shù)值)。標(biāo)簽一個標(biāo)簽必須僅在一行中聲明,并且以一個冒號“:”開始?!皉estore”標(biāo)簽在uBASIC中有一個重要的預(yù)定義標(biāo)簽::restore當(dāng)全按相機快門鍵時uBASIC會試圖跳轉(zhuǎn)到標(biāo)簽“restore”。(在你過早地終止一個腳本時發(fā)生)。這個標(biāo)簽的目的是允許腳本編寫者在他們的腳本被其它的一些設(shè)置打斷時,編寫一段“最后清理”例程用來恢復(fù)相機到“普通”設(shè)置,這可能是很重要的,例如,假如你的腳本使用了自動對焦鎖,這時過早地中止可能會使相機處于一個不能對焦的狀態(tài)。那么通過使用restore標(biāo)簽?zāi)隳馨欢未a,清除自動對焦鎖及點亮顯示屏。uBASIC中可用的數(shù)學(xué)運算符+加-減*乘/除%求余(看后邊的解釋)<小于>大于=等于<=小于或等于>=大于或等于<>不等于&與運算|或運算^異或運算絕大多數(shù)的運算符都容易理解,但%(求余)運算需要用一段短小的代碼加以解釋。例如:當(dāng)把用s代表的總秒數(shù)轉(zhuǎn)化成多少分多少秒顯示時,代碼如下:print“TotalTime:”,s/60;“min”,s%60;“sec”當(dāng)s的值是328秒時,那么顯示結(jié)果如下:TotalTime:5min28sec注意:&、|、^這三個運算符是位運算符,而不是邏輯運算符,邏輯運算符是and,or,not。位運算示例如下:e=5|3printe將返回“7”。5&3的結(jié)果為“15^3的結(jié)果為“6邏輯運算:and,or,notnot邏輯非最好用一個圓括號組成,即not(表達式)and邏輯與or邏輯或子例程在復(fù)雜的程序任務(wù)中,把程序分割成小的“子例程”,然后通過gosub命令調(diào)用通常是有益的。一個子例程幾乎可以是任何內(nèi)容,但它通常用來編寫一個將會被多次調(diào)用的命令集,通過把這段代碼往到一個字例程中,然后在主程序內(nèi)使用gosub“標(biāo)簽名”的方式調(diào)用它,可以避免一遍又一遍地重復(fù)編寫同樣的命令集。子例程通常放在主程序的后邊,以一個可供gosub“l(fā)abal”調(diào)用的標(biāo)簽開始,并以return命令結(jié)束,以使這部分代碼執(zhí)行完后能返回調(diào)用它的位置。gosub和goto是相似的,但是應(yīng)該盡量不用goto,除非你知道你在做什么。gosub總是會從一個子例程中一到達return命令時就返回主程序。goto則不能做這樣的動作。邏輯命令uBASIC中可以使用的邏輯命令有:cls、rem、exit_alt、sleep、if/then/else、do/until、while/wend、for/to/step/next、select/case、gosub、goto、get_day_seconds、get_tick_count、print、print_screenclscls表示“清屏”。這將會在任意的print聲明后輕易地清除整個屏幕內(nèi)容。而不是必須通過發(fā)送5條print“”命令完成這一操作。do/until用于創(chuàng)造一種不斷地循環(huán)往復(fù)的運行方式,或者等待一些條件變?yōu)檎?,在do/until循環(huán)中的代碼總是至少執(zhí)行一次(不像while/wend循環(huán))用法:do其它命令行……until關(guān)系表達式這里的關(guān)系表達式可以是任意的邏輯表達式,當(dāng)它的值為真時,循環(huán)結(jié)束。例如:remsetsomestartingvaluesforthevariablesy=0x=5remstartdo-loopdoremincrementxby10eachtimex=x+10remincrementyby1eachtimey=y+1remprintresultstoviewfindermini-consoleprint“ThisDOloophappened”,y;“times.”remrepeatingdo-loopuntilxisequaltothevuntilx>=55endend這將是你的程序執(zhí)行的最后一行。它告訴腳本停止所有的操作,并將相機的控制權(quán)返還給你。在結(jié)束一個腳本之前,最好恢復(fù)腳本在初始化期間和運行期間所改變的相機的所有設(shè)置,以使最終用戶不必恢復(fù)腳本引起的所有按鍵和菜單改變。exit_alt這個命令用于離開<Alt>模式。for/to/step/next這些命令用于建立簡單的計數(shù)循環(huán),例如:forn=2toastep2sleeptprint“Shoot”,n,“of”,ashootnextnget_day_seconds該函數(shù)返回從午夜開始時的秒數(shù),注意這個函數(shù)格式有點兒不同于其它標(biāo)準(zhǔn)的uBASIC函數(shù)。用法:t=get_day_secondsget_tick_count這個函數(shù)返回相機電源打開后所經(jīng)過的毫秒數(shù),,注意這個函數(shù)格式有點兒不同于其它標(biāo)準(zhǔn)的uBASIC函數(shù)。用法:t=get_tick_countgosub呼叫指定的子例程,執(zhí)行后立即返回gosub后邊的命令。一個簡單的gosub例子:forx=1to10gosub“display”nextx:displayprintxreturn下邊是一個更長的例子,用于拍攝3張照片,并增加ISO設(shè)置:shootfori=1to3gosub“incISO”shootnextifori=1to3gosub“decISO”nextend:incISOclick“menu”[somemoreclicks]return:decISOclick“menu”[somemoreclicks]returngoto立即跳轉(zhuǎn)到指定的標(biāo)簽。@titleIntervalShootingNon-stop@paramaInterval(Minutes)@defaulta0@parambInterval(Seconds)@defaultb5@paramcInterval(10thSeconds)@defaultc0t=a*60000+b*1000+c*100ift<100thenlett=5000n=1print“Intervalshooting.”print“Untilyouinterruptit.”print“Usewithcaution.”sleep1000:shotprint“Shotnumber”,nshootn=n+1sleeptgoto“shot”if/then/else示例:ifa>2thengosub“subroutine1”ifa>2thengosub“subroutine1”elsegosub“subroutine2”let用于執(zhí)行變量賦值,可以省略,如:leta=2可以簡寫為a=2print用于在顯示屏的微控制區(qū)域顯示文本或數(shù)值。語法:print“25charactersoftext”注意:每行應(yīng)限制在25字符以內(nèi)??梢园ㄗ兞恐祷蛘麛?shù)表達式。例如:remPrinttotaldurationofintervaltoviewfinderprint“Totaltime:”,t*a/60000;“min”,t*a%60000/1000;“sec”sleep1000remStartactualcameraoperationinaloopprint“Shot1of”,ashootforn=2toasleeptprint“Shot”,n,“of”,ashootnextn注意:逗號表示輸出一個空格,分號則無空格例如:print“C”,”H”,”D”,”K”print“C”;”H”;”D”;”K”輸出結(jié)果是:CHDKCHDKprint_screen腳本輸出到微型控制屏幕上的內(nèi)容都能被寫入到相機SD卡中的一個文件中,例如“\CHDK\LOGS\LOG_0001.TXT”。要激活這個捕捉功能,應(yīng)在你的腳本開頭包含下邊腳本:print_screennn是一個非零的正整數(shù)常數(shù),變量或表達式,取值范圍為1~9999。一個新文件(例如n=1時,\CHDK\LOGS\LOG_0001.TXT)被創(chuàng)建,或者如果它已經(jīng)存在,那么它將被清空。要取消屏幕轉(zhuǎn)儲,請使用如下命令:print_screen0在一個腳本中屏幕轉(zhuǎn)儲能被多次使用,但是如果你不想丟失先前的記錄內(nèi)容,請注意增加“n”的值?!皀”的值可以超過9999,但是文件名仍然只能包含4位數(shù),將只能保留后邊的4位數(shù),如果“n”為負數(shù),則會自動轉(zhuǎn)為正數(shù)編寫文件名。也就是說只能限制到10000個記錄文件以內(nèi)。示例:@titleprintscreentest@paramaNone@defaulta0@paramnFileNum@defaultn1print_screennprint“START”,nprint_screen0n=n+1print“Notwrittentofile”print_screennprint“Thisshouldbewrittentonextfile.”print“a=”;aprint_screen0end這將創(chuàng)建包含下列內(nèi)容的兩個文件:\CHDK\LOGS\LOG_0001.TXT:START1\CHDK\LOGS\LOG_0002.TXT:將寫入下邊的內(nèi)容a=0random返回一個最小值與最大值之間的隨機整數(shù)。例如:playsoundrandom36將以隨機的順序播放聲音3,4,5,6(假如在一個循環(huán)中重復(fù)該代碼)rem注釋語句,會耗費程序運行時間,并占用內(nèi)存。select/case功能示例:forx=1to7selectxcase1;gosub“new”case7;goto“EXIT”case2,4;print“x=2|x=4”case2to5;print“x=3|x=5”case_elseprint“x=6”end_selectnextx:EXITprint“ready”end:newprint“sub”fory=1to2selectycase1;print“y=1”case_elseprint“y=2”end_selectnextyreturn第二個select例子(在“new”子例程之中)實際上是一個低劣的示例,在這個情況下最好用一個單一的if/then/else聲明。sleep這將暫停腳本以允許一些動作發(fā)生,或在下一個動作發(fā)生以前進行延時操作,經(jīng)常會需要在腳本中插入sleep,以使相機執(zhí)行一些必要的動作。語法:sleepx假如x為1000時,即為1秒(1000毫秒),但定時器分辨率僅能達到10~30毫秒。while/wend與do/until循環(huán)相似,不同的是while/wend之間的代碼有可能從不被運行。示例:x=0whilex<200x=x+25print“Thevalueofxis”,xwend相機操作命令這些命令用來讓你的腳本控制相機,與手動控制很相似。通過手指按鍵能做到的所有事情,幾乎都能通過這些腳本命令做到。在設(shè)法保持你的腳本在8K字符(8192字節(jié))以內(nèi)的情況下,你的腳本的復(fù)雜性和時間線僅僅受限于你的想像力。相機命令可以寫為下邊3種類別的命令方法:click“按鍵名”瞬間按鍵,用作即刻執(zhí)行一次命令。這是發(fā)出一個相機命令的最常用方法。press“按鍵名”按下相機按鍵,并且保持不松開,它持續(xù)按下,直到對同樣的按鍵名發(fā)出release命令。某些相機命令僅能在使用期間當(dāng)一個按鍵被持續(xù)按下時被使用。例如:在S系列相機中進行手動對焦時,當(dāng)發(fā)出聚焦命令時,MF鍵需要被持續(xù)按下?;蛘弋?dāng)在高速觸發(fā)模式拍攝時,快門鍵需要持續(xù)按下,在必要的時候發(fā)出press“shoot_full”命令。release“按鍵名”用于結(jié)束press“按鍵名”命令。除了經(jīng)常使用的shoot命令之外,其它能手動按下的所有相機按鍵命令都可以在腳本中用這樣的語法調(diào)用。shoot被單獨使用,前邊沒有click,press和release命令方法。所有按鍵命令(除shoot外)的寫法都像下邊這樣:命令方法“按鍵名”這里的命令方法可以是click,press,或release,按鍵名必須被包含在雙引號內(nèi)。例如,一個在A系列相機中生成AE鎖和AF鎖的簡單腳本用到了所有3種命令方法:sleep2000press“shoot_half”sleep1000click“erase”click“down”release“shoot_half”autostarted如果腳本自動啟動則返回1(true)click/press/release像上邊描述的那樣,用來模擬一個相機按鍵動作,有效的按鍵名在下邊列出:“display”、“erase”、“menu”、“print”、“set”、“shoot_full”、“shoot_half”、“up”、“down”、“l(fā)eft”、“right”、“zoom_in”、“zoom_out”注:“shoot_half”:在昏暗的光線下,使相機捕捉到焦點可能會花去2秒或更多的時間。假如你的腳本使用這個命令自動對焦,并被設(shè)計用于低照度下的拍照,最好在一個press“shoot_half”命令之后使用一條sleepx命令,這里x取值可以在1500~2500之間。甚至最好在press“shoot_half”之后使用下邊代碼:doget_prop206puntilp=1這樣它等待的時間將會和對焦鎖定的時間一樣長。示例一:(包圍曝光)@titleEXPbracketing@paramaNumberof±steps@defaulta2@parambStepsize(1/3EV)@defaultb3ifa<1thenleta=2ifb<1thenletb=3sleep1000print“Preparing...”click“erase”forn=1toa*bclick“l(fā)eft”nextnfors=1toa*2print“Shoot”,s,“of”,a*2shootforn=1tobclick“right”nextnnextsprint“Shoot”,a*2+1,“of”,a*2shootprint“Finalizing...”forn=1toa*bclick“l(fā)eft”nextnclick“end示例二:(變焦操作)fors=2toaforn=1tobprint“Zooming-in”,n;“click“zoom_in”sleep600nextnprint“Shoot”,s,“of”,ashootnexts在每一步變焦放大之后暫停0.6秒。get_autostart讀出腳本配置中的自動啟動屬性。(0=off,1=on,2=once)(參見set_autostart)get_display_mode返回顯示模式(僅在拍攝模式),不管是DigicII還是DigicIII的相機(它的一個用處是幫助獲得CHDK腳本的通用性)。0=顯示信息圖示1=不顯示信息圖示2=LCD關(guān)3=EVF(電子取景器)get_drive_mode返回驅(qū)動模式(像屬性頁中描述的那樣):0=單張1=連拍2=定時器(在DigicII中)3=定時器(在DigicIII中)定時器在通用性的腳本中運用起來稍微有些困難,然而配合get_propset使用則可以實現(xiàn)。get_ev返回屬性選項25/107(DigicII/DigicIII)。get_exp_count返回一段時期內(nèi)的拍攝張數(shù)。有一些時候是有用的,例如,在觸發(fā)模式下想要拍攝3張后停止。在SD1000中返回最后曝光的文件序號。get_flash_mode返回閃光模式(0,1,2=自動閃光,開,關(guān))get_flash_ready如果閃光燈充電完成則返回非0值。get_focus(CHDK125版及以后)語法:get_focus(返回焦距值(毫米)并放入變量x中)(參見set_focus)get_histo_range用法:get_histo_range<from><to>返回<from>和<to>之間直方圖數(shù)據(jù)所占的百分比。這個命令返回所拍的最后一張照片的直方圖信息,它執(zhí)行讀RAW緩沖區(qū)(但是不需要啟用RAW存儲功能:拍攝的直方圖數(shù)據(jù)取自于被拋棄或進一步處理之間的RAW數(shù)據(jù))。在非常暗的場景中它獲取的信息是非常有用的:這時,實時預(yù)覽屏幕全黑,然后RAW緩沖區(qū)(通過長時間的曝光)將獲得一個圖像。它依賴于shot_histo_enable命令:假如shot_histo_enable沒有設(shè)置,get_histo_range返回-1值,因此shot_histo_enable必須首先被啟動。這是必須的,因為在每次拍攝后計算拍攝直方圖會花去一些時間。因此,在默認情況下拍攝直方圖是禁用的,需要用shot_histo_enable啟用它。示例:remenableshootinghistogramshot_histo_enable1shootsleep100remlet'sreadhistogramoftheshotthatwasjusttakenh=get_histo_range100800remhcontainsthepercentageofpixelsthatarerembetween100/1024and800/1024get_IS_mode返回IS模式。0,1,2,3=continuous,shootonly,panning,offget_iso(CHDKBuild125及以后版本)語法:Get_isox(ISO的值存放到變量x中)(參見set_iso)get_mode返回是拍攝模式還是回放模式處于活動狀態(tài)。在打算運行特定的模式時用于切換腳本。(所有有效腳本的99%都像這樣!)在拍攝模式中返回0,回放模式中返回1,當(dāng)相機處于拍攝模式且模式轉(zhuǎn)盤設(shè)置為視頻模式時返回2。get_movie_status返回視頻拍攝狀態(tài),能用于取代sleep命令檢查。0-視頻拍攝停止1-視頻拍攝暫停4-拍攝進行中5-拍攝停止但相機仍然在向SD卡中寫入視頻。get_nd_present如果沒有ND(中密度濾光鏡)存在時返回0,如果有ND存在及實際光圈不存在時返回1,兩者都存在時返回2。get_orientation_sensor在DigicII/DigicIII中都返回方向傳感器的角度。get_platform_id返回平臺ID號(整數(shù)),通過使用它,能編寫依賴于具體平臺的腳本。get_propget_propset返回屬性集,表示你的相機是用DigicII/DigicIII的哪一個屬性集工作。返回1(屬性集1)或2(屬性集2)。在這里查找你的屬性選項:/wiki/PropertyCaseget_quality返回當(dāng)前捕捉質(zhì)量等級的設(shè)置,與相機OS無關(guān)。要了解可能的值請查看屬性選項。(一般情況下為0~2,2是最差的等級)get_resolution返回當(dāng)前捕捉分辨率的等級設(shè)置,與相機OS無關(guān)。要了解可能的值請查看屬性選項。(一般情況下為0~8,相當(dāng)于佳能設(shè)置項)。get_shooting返回屬性選項205(DigicII)/206(DigicIII)get_temperature用法:get_tempraturen在這里:0返回光學(xué)元件溫度1返回CCD元件溫度2返回電池溫度。它能被指定到一個變量或直接打印輸出。例如:a=get_temperature0print“OpticalTemp:”,a或:print“BatteryTemp:”,get_temperature2get_time返回相機當(dāng)前時間的元素。用法:get_time0(返回秒)1(分)2(時)3(日)4(月)5(年)get_av/tv,set_av/tv等等這是幾個用來獲得和設(shè)置光圈、快門速度的命令。他們僅工作在手動模式(你能完全地在任意模式下改變這些設(shè)置,但他們只在手動模式下有效,可能在Av和Tv模式下也行)。下邊是這些命令的測試腳本。這些命令是:get_avtargetget_tvtargetset_avvalset_av_relvalset_tvvalset_tv_relvaltarget是一個變量名(a~z),val是一個表達式。下邊是一個設(shè)置和打印這些值的例子::set_getset_avcset_tvbprint“AV,TVsetto”,c,bsleep1000click“shoot_half”sleep100get_avnget_tvmprint“AV,TVgot”,n,mend你能相對于現(xiàn)有的值對設(shè)置進行改變(這樣可以使包圍曝光更容易且更快):remincreaselight(1/3+1/3steps)set_tv_rel0-1set_av_rel0-1shootendAv和Tv設(shè)置提供了下列的實際值;大體上±1設(shè)置表示±1/3EV的變化。光圈曝光值A(chǔ)v值Tv值Tv值Tv值TvF/2.7915”–121”“01/15121/25024F/3.21013”–110”811/20131/32025F/3.51110”–100”621/25141/40026F/4.0128”–90”531/30151/50027F/4.5136”–80”441/40161/64028F/5.0145”–70”351/50171/80029F/5.6154”–61/461/60181/100030F/6.3163”2–51/571/80191/125031F/7.1172”5–41/681/100201/160032F/8.0182”–31/891/125211/2000331”6–21/10101/160221/2500341”3–11/13111/200231/320035用法注解當(dāng)使用set_tv,set_tv_rel,orset_av,set_av_rel命令時,發(fā)現(xiàn)如果插入press、click“button”這樣的一系列命令時可能會使上述命令失效。如果在測試腳本時發(fā)現(xiàn)這些命令不能改變快門速度或光圈,試著將它們的位置移到任意press“shoot_half/full”或click“timer”(S系列特有)命令之前。set_tv命令應(yīng)該放在它將工作以前,試圖將它放在實際拍攝以前的其它位置,腳本將不能正常工作。佳能固件會在許多方面使用這些“TV”值,依賴于操作模式。最常用的方面是在半按時自動曝光。因此這些屬性選項必須在自動曝光完成之后設(shè)置,否則佳能固件將會覆蓋它們的操作,使它們無法生效。get_zoom語法:get_zoomx(變焦步數(shù)值被放置在變量x中)范圍:A-系列:x=0~8或14(9or15步)S-系列:x=0~128(129步)(參見set_zoom,set_zoom_rel,set_zoom_speed.)get_zoom_steps返回最大的變焦級數(shù),與相機硬件無關(guān)(可用于通用性的變焦腳本)。例如:在A620中將返回8,在S3IS中將返回128。is_key(參見‘wait_clickandis_key’)is_pressed“key”在執(zhí)行這個命令時,檢測一個鍵是否被按下。參見wait_click與is_key。md_detect_motion(運動檢測命令)注:有大量的討論通過使用適當(dāng)?shù)姆椒ɡ眠@個令人難以置信的具有高度適應(yīng)性、用戶可定制的功能。一個漫長的討論是怎么用最快的反應(yīng)時間捕捉閃電發(fā)出的光,現(xiàn)在已經(jīng)有人發(fā)布了兩種具有最快檢測速度的腳本。我不是這個功能的作者,那么在下面的信息中可能會存在一些錯誤。希望作者能檢查一下這些是否全都正確。核心部分來自于MX3的演示和測試腳本文件。語法:md_detect_motiona,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p這個命令的參數(shù)功能是設(shè)置的核心部分,各參數(shù)含義如下:a表示圖片切割的列數(shù)b表示圖片切割的行數(shù)c表示測量模式(Y,U,V,R,G,B)--U=0,Y=1,V=2,R=3,G=4,B=5d延時e比較間隔(毫秒)f門限(觸發(fā)檢測的表格差異度,范圍0~25)g畫網(wǎng)格線(0=no,1=yes)h返回動作檢測時表格的變化數(shù)可選參數(shù):i區(qū)域(masking)模式:0=無區(qū)域,1=包含,2=排除。j區(qū)域第一列k區(qū)域第一行l(wèi)區(qū)域最后一列m區(qū)域最后一行n參數(shù):1=使立即拍攝,2=記錄調(diào)試信息到文件,4=從內(nèi)存轉(zhuǎn)儲活動視圖圖像到一個文件,8=立即拍攝,不釋放快門。o像素跨度――調(diào)節(jié)速度與精確度(1=使用每個像素,2=使用每兩個像素等等)p到開始觸發(fā)的延時毫秒數(shù),對校準(zhǔn)和畫網(wǎng)格選項有用。最少變量數(shù)應(yīng)該像如下命令這樣設(shè)置(8個參數(shù)):md_detect_motiona,b,c,d,e,f,g,h參數(shù)詳解:a和b(輸入?yún)?shù)):定義屏幕被分割的列數(shù)與行數(shù),通過將屏幕分割成表格,以對各單元格進行運動檢測。(如果值小于0或表格格數(shù)大于1024[即a×b>1024],則默認設(shè)置為3×3。)c(輸入?yún)?shù)):像素檢測模式,可以基于亮度(Y)、U色差分量、V色差分量或R、G、B顏色分量值檢測運動。如沒有特別需要,應(yīng)使用亮度Y模式(即默認值c=1)。(0-U,1-Y,2-V,3-R,4-G,5-B.)相關(guān)知識:YUV是被歐洲電視系統(tǒng)所采用的一種顏色編碼方法(屬于PAL),是PAL和SECAM模擬彩色電視制式采用的顏色空間。其中的Y,U,V幾個字母不是英文單詞的組合詞,Y代表亮度,uv代表色差,u和v是構(gòu)成彩色的兩個分量。在現(xiàn)代彩色電視系統(tǒng)中,通常采用三管彩色攝影機或彩色CCD攝影機進行取像,然后把取得的彩色圖像信號經(jīng)分色、分別放大校正后得到RGB,再經(jīng)過矩陣變換電路得到亮度信號Y和兩個色差信號R-Y(即U)、B-Y(即V),最后發(fā)送端將亮度和色差三個信號分別進行編碼,用同一信道發(fā)送出去。這種色彩的表示方法就是所謂的YUV色彩空間表示。采用YUV色彩空間的重要性是它的亮度信號Y和色度信號U、V是分離的。如果只有Y信號分量而沒有U、V信號分量,那么這樣表示的圖像就是黑白灰度圖像。彩色電視采用YUV空間正是為了用亮度信號Y解決彩色電視機與黑白電視機的相容問題,使黑白電視機也能接收彩色電視信號。d(輸入?yún)?shù)):檢測暫停,設(shè)置運動檢測事件發(fā)生的時間限制,在這段時間結(jié)束之后腳本命令結(jié)束,檢測表格計數(shù)將為0(h參數(shù)項)。它讓md_detect_motion在一段時間內(nèi)運行,在這段時間內(nèi)如果沒有檢測到運動,則阻止下一條uBASIC命令執(zhí)行(以毫秒為單位),直到該命令結(jié)束。如果在這段時間內(nèi)檢測到了運動,命令將立即結(jié)束,然后執(zhí)行下一條命令(h將大于0)。當(dāng)你想和MD一起定時地執(zhí)行其它一些uBASIC命令時這將是有用的。例如:MD例程等候變化10秒鐘;如果沒有檢測到運動,則會在10秒鐘之后繼續(xù)執(zhí)行一些其它的代碼,如果檢測到了運動,則馬上結(jié)束檢測,進入下一條命令。如果需要,還能再一次呼叫md_detect_motion恢復(fù)運動檢測。實際上,暫停值(參數(shù)d)應(yīng)該比觸發(fā)延時毫秒數(shù)(參數(shù)p)更大,否則總是會得到返回變化數(shù)(參數(shù)h)=0。e(輸入?yún)?shù)):兩張圖片進行比較間隔的毫秒數(shù),設(shè)置一個適當(dāng)?shù)闹担梢允惯\動檢測事件通過屏幕圖像的快速或慢速改變引起觸發(fā)。如果你需要過濾掉由那些快速移動對象頻繁引起的微小變化(如風(fēng)吹樹葉,飛行的昆蟲),應(yīng)該增加這個值使采樣時間間隔更大。這在對移動非常慢的對象進行運動檢測時是很有用的,例如:蝸牛、粘菌、試圖避開運動檢測的緩慢移動的罪犯。f(輸入?yún)?shù)):能夠觸發(fā)檢測的變化差異值,通過設(shè)置一個較大的門限值(0~255),可以防止“普通”操作觸發(fā)檢測,而以你期待的模式觸發(fā)運動檢測,通過設(shè)置一個較小的門限值,可以提高運動檢測的靈敏度,即:小的運動變化、小的運動對象都可以檢測到。g(布爾型輸入?yún)?shù)):決定檢測表格的網(wǎng)格是否被顯示,true(1)表示在屏幕上畫網(wǎng)格(表格的檢測區(qū)塊),false(0)表示不畫網(wǎng)格。h(輸出參數(shù)):達到足夠觸發(fā)運動檢測的像素值有差異的表格數(shù)。這個變量用于決定在其變化超過指定門限值的表格數(shù)達到一定數(shù)量時,是否要拍攝。示例:ifh>0thenshooti(輸入?yún)?shù)):剪取區(qū)域模式,決定一個區(qū)域是包含還是排除??梢詫⒁粋€區(qū)域排除在運動檢測觸發(fā)之外,或只用一個指定區(qū)域進行運動檢測(該區(qū)域由j,k,l,m四個參數(shù)確定)。取值為:0=沒有剪取區(qū)域(默認),1=從運動檢測中排除選擇區(qū)域,2=僅用該區(qū)域進行運動檢測j,k,l,m:定義屏幕的一個子區(qū)域在進行運動檢測時是限制在該子區(qū)域內(nèi)部或者排除在該子區(qū)域之外。j,k為剪取區(qū)域左上角的列號、行號,l,m為剪取區(qū)域右下角的列號、行號。n:參數(shù):1=使立即拍攝,2=記錄調(diào)試信息到文件,4=從內(nèi)存轉(zhuǎn)儲活動視圖圖像到一個文件,8=立即拍攝,不釋放快門。(一般用0)o:像素跨度――調(diào)節(jié)速度與精確度(1=使用每個像素,2=使用每兩個像素等等),對每像素進行采樣將獲得最大的檢測精確度,但在某些情況下需要增大像素采樣跨度,以獲得更快的檢測速度。p:開始觸發(fā)的延時毫秒數(shù),對精確度調(diào)整(o)和畫網(wǎng)格選項(g)有用,默認值是0.5秒。由于延時較小時,相機在觸發(fā)進入下一次檢測時,相機還在執(zhí)行存儲、處理等操作,屏幕圖像還沒有穩(wěn)定下來,這將會使相機立即觸發(fā),進入拍攝死循環(huán),所以應(yīng)該盡量將這個參數(shù)設(shè)置為一個較大的數(shù)值。我在A540中拍攝jpg格式全尺寸圖像時是把它設(shè)為4秒以上。如果你的相機處理速度夠快,存儲卡的速度也夠快的話,可以嘗試降低觸發(fā)延時,以使相機盡快觸發(fā),進入下一次的運動檢測狀態(tài)。當(dāng)然這個延時必須小于d參數(shù)設(shè)定的檢測暫停時間,否則檢測暫停時間一到,檢測命令則將完成并退出,此時還未開始觸發(fā)檢測,不能進行任何運動檢測操作,h參數(shù)將只能返回0,也就是檢測不到運動改變。示例:閃電捕捉腳本remTestedonA570IS,Allbestbuild16remForbursts,setthecameraincontinuousshootingmodeandsetj>0remIfj>0insingleshotmode,youwillseeyourshotforjsecondsonscreen.@titleFastMDwithBurst/Preview080205@paramaColumns@defaulta6@parambRows@defaultb4@paramcThreshold(0-255)@defaultc10@paramdCompareInterval(ms)@defaultd1@parameTriggerDelay(0.1sec)@defaulte42@paramfRowstoExclude@defaultf0@paramgPix-Step(speed/accuracyadj)@defaultg8@paramhRegMode(0-no,1-incl,2-excl)@defaulth0@paramiMeasureMode(1-Y,0-U,2-V)@defaulti1@paramjBurst/Preview(sec,0=off)@defaultj0ifa<1thena=1ifb<1thenb=1ifc<0thenc=0ifg<1theng=1iff<1thenf=1ifj<0thenj=0e=e*100j=j*1000print">[";a;",";b;"]threshold:";cx=30000ifj>0thengoto"md_burst":md_singleshotpress"shoot_half"t=0domd_detect_motiona,b,i,x,d,c,1,t,h,1,1,a,f,0,g,euntilt>0click"shoot_full"goto"md_singleshot":md_burstpress"shoot_half"t=0domd_detect_motiona,b,i,x,d,c,1,t,h,1,1,a,f,0,g,euntilt>0press"shoot_full"letX=get_tick_count:contloopletU=get_tick_countletV=(U-X)ifVrelease"shoot_full"goto"md_burst"md_get_cell_diff對于那些想知道場景檢測實際發(fā)生在哪里的人,這是一個可選的程序。這個程序設(shè)計用于場景改變的高級分析。我并不認為多數(shù)人會用到它。大多數(shù)人會用“h”變量從上邊的例子中觸發(fā)拍攝。用法:md_get_cell_diff(column),(row),x這里的x將返回一個0~255間的值,體現(xiàn)那個單元格的最終變化。可以通過檢測到的沒有變化觸發(fā)一個腳本來拍攝,或者無論你需要以多高的靈敏度對那個單元格進行檢測。示例:如果你想在所有運動停止時拍攝一張照片,用下邊代碼:ifx=0then“shoot”當(dāng)檢測到任何運動時拍攝一張照片,用下邊代碼:ifx>0then“shoot”playsound如果聲音打開時,播放任意一個內(nèi)建聲音事件。示例:playsound0這里的0是啟動聲音。那里的聲音范圍是從0到7,7是一個刺耳的長鳴聲。最初的幾個聲音只能在相機沒有設(shè)置靜音時播放,但其它的蜂鳴聲會被播放(相機需要取消靜音,沒有測試過刺耳的錯誤提示音)。這個功能將引發(fā)更多的功能,例如防盜保護。參數(shù)取值意義如下:0=啟動聲音 4=短鳴聲1=快門聲音 5=AF(自動對焦)確認2=按鍵聲音 6=錯誤提示音3=自拍定時聲 7=長鳴聲(刺耳!能通過半按快門停止)press(參見click/press/release)release(參見click/press/release)set_aflock鎖定/解鎖自動對焦。用法:set_aflock(x)x為1時鎖定自動對焦,為0時解鎖。它與MF(手動對焦)相似,但在各個地方會更好,例如:在所有相機中有效。即使相機從深度的顯示休眠中返回時也能鎖定焦點(經(jīng)過反復(fù)按顯示鍵或打印鍵快捷方式),這對延時拍攝時關(guān)心電源消耗很有好處,在相機搖晃時,在整個延時拍攝期間也能減少相機機械部分的壓力。你能像這樣使用它:半按(設(shè)置自動對焦)…(這里需要一個暫?;驙顟B(tài)檢查以等待聚焦完成。)set_aflock(1)焦點現(xiàn)在就被固定了,意味著其它的半按操作將不能重調(diào)焦(AF燈甚至都不會打開)。當(dāng)你不再需要固定焦點時,呼叫set_aflock(0)。注:AE(自動曝光)這時是無效的。set_autostart將自動啟動類型寫入配置腳本(0=關(guān),1=開,2=一次)(參見get_autostart)set_backlight運用這個功能LCD背景燈(或EVF背景燈)能被打開或關(guān)閉,對節(jié)能或執(zhí)行隱藏任務(wù)時有用。(背景燈是LCD內(nèi)部的一個明亮的燈,使圖像可見)。用法:set_backlightx這里0禁用背景燈,1啟用。注:相機在每次拍攝后啟用背景燈。要使背景燈持續(xù)禁用,這條命令必須在每次拍攝后呼叫。但不要在拍攝后立即呼叫它,否則它的影響將非常短暫。在呼叫前必須等待LCD活動圖像固定下來。注:如果你在背景燈禁用后意外地退出了腳本,可以通過退出ALT模式然后拍攝恢復(fù)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 高新技術(shù)產(chǎn)業(yè)在減少環(huán)境污染中的關(guān)鍵作用分析報告
- 高效行政管理與企業(yè)文化塑造的協(xié)同發(fā)展
- 高效財務(wù)規(guī)劃助力企業(yè)發(fā)展
- 購物中心的品牌價值與其服務(wù)質(zhì)量的關(guān)系
- 高中語文情感美文當(dāng)你寂寞時我會陪伴你
- 購物車維護與保養(yǎng)知識
- 高中語文情感美文繼續(xù)戀愛
- 跨國公司合資中的風(fēng)險評估與應(yīng)對
- 高科技在葡萄酒標(biāo)簽制作中的應(yīng)用
- 超市存儲貨物擺放標(biāo)準(zhǔn)及操作規(guī)程
- 2025年萍鄉(xiāng)衛(wèi)生職業(yè)學(xué)院單招職業(yè)傾向性測試題庫審定版
- 人教版四年級數(shù)學(xué)下冊《圖形的運動(二)》試題(含答案)
- 2024-2025學(xué)年五年級(下)信息科技教學(xué)計劃
- 《老年人權(quán)益保障法》
- 2025屆上海市(春秋考)高考英語考綱詞匯對照表清單
- 2025-2030年中國pcb行業(yè)競爭格局及未來投資趨勢分析報告新版
- 2025年年食堂工作總結(jié)和年工作計劃例文
- 船舶制造設(shè)施安全生產(chǎn)培訓(xùn)
- 全國駕駛員考試(科目一)考試題庫下載1500道題(中英文對照版本)
- TSG 07-2019電梯安裝修理維護質(zhì)量保證手冊程序文件制度文件表單一整套
- 2025深圳勞動合同下載
評論
0/150
提交評論