ai.dev.js 171 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842
  1. "use strict";
  2. /*
  3. _ ___ ____ _
  4. / \ |_ _| | __ ) __ _ ___(_) ___
  5. / _ \ | | | _ \ / _` / __| |/ __|
  6. / ___ \ | | | |_) | (_| \__ \ | (__
  7. /_/ \_\___| |____/ \__,_|___/_|\___|
  8. */
  9. Blockly.Blocks['ai_k210_button_read_pressed'] = {
  10. init: function init() {
  11. this.appendDummyInput().appendField(Blockly.Msg.ai_basic_button_when).appendField(new Blockly.FieldDropdown([["A", "a"], ["B", "b"], ["C", "c"]]), "button_type").appendField(Blockly.Msg.ai_basic_pressed);
  12. this.setOutput(true, null);
  13. this.setColour("#d42b03");
  14. this.setTooltip("");
  15. this.setHelpUrl("");
  16. }
  17. };
  18. Blockly.Python['ai_k210_button_read_pressed'] = function (block) {
  19. Blockly.Python.definitions_['import_define_x_ai_button'] = '' + 'from fpioa_manager import *\n' + 'from Maix import FPIOA, GPIO\n' + '\n' + '_gp_side_buttons = [9, 10, 11]\n' + '\n' + 'FPIOA().set_function(_gp_side_buttons[0],FPIOA.GPIO0)\n' + 'FPIOA().set_function(_gp_side_buttons[1],FPIOA.GPIO1)\n' + 'FPIOA().set_function(_gp_side_buttons[2],FPIOA.GPIO2)\n' + '\n' + '_gp_side_a = GPIO(GPIO.GPIO0,GPIO.IN,GPIO.PULL_UP)\n' + '_gp_side_b = GPIO(GPIO.GPIO1,GPIO.IN,GPIO.PULL_UP)\n' + '_gp_side_c = GPIO(GPIO.GPIO2,GPIO.IN,GPIO.PULL_UP)\n' + '\n';
  20. var _type = block.getFieldValue('button_type');
  21. var code = '_gp_side_' + _type + '.value() == 1';
  22. return [code, Blockly.Python.ORDER_CONDITIONAL];
  23. };
  24. Blockly.Blocks['ai_k210_button_read_released'] = {
  25. init: function init() {
  26. this.appendDummyInput().appendField(Blockly.Msg.ai_basic_button_when).appendField(new Blockly.FieldDropdown([["A", "a"], ["B", "b"], ["C", "c"]]), "button_type_released").appendField(Blockly.Msg.ai_basic_released);
  27. this.setOutput(true, null);
  28. this.setColour("#d42b03");
  29. this.setTooltip("");
  30. this.setHelpUrl("");
  31. }
  32. };
  33. Blockly.Python['ai_k210_button_read_released'] = function (block) {
  34. Blockly.Python.definitions_['import_define_x_ai_button'] = '' + 'from fpioa_manager import *\n' + 'from Maix import FPIOA, GPIO\n' + '\n' + '_gp_side_buttons = [9, 10, 11]\n' + '\n' + 'FPIOA().set_function(_gp_side_buttons[0],FPIOA.GPIO0)\n' + 'FPIOA().set_function(_gp_side_buttons[1],FPIOA.GPIO1)\n' + 'FPIOA().set_function(_gp_side_buttons[2],FPIOA.GPIO2)\n' + '\n' + '_gp_side_a = GPIO(GPIO.GPIO0,GPIO.IN,GPIO.PULL_UP)\n' + '_gp_side_b = GPIO(GPIO.GPIO1,GPIO.IN,GPIO.PULL_UP)\n' + '_gp_side_c = GPIO(GPIO.GPIO2,GPIO.IN,GPIO.PULL_UP)\n' + '\n';
  35. var _type = block.getFieldValue('button_type_released');
  36. var code = '_gp_side_' + _type + '.value() == 0';
  37. return [code, Blockly.Python.ORDER_CONDITIONAL];
  38. };
  39. Blockly.Blocks['ai_k210_led_light_up'] = {
  40. init: function init() {
  41. this.appendDummyInput().appendField(Blockly.Msg.ai_basic_led_set).appendField(new Blockly.FieldDropdown([[Blockly.Msg.ai_basic_led_blue, "blue"], [Blockly.Msg.ai_basic_led_red, "red"]]), "type").appendField(Blockly.Msg.ai_basic_led_on);
  42. this.setPreviousStatement(true, null);
  43. this.setNextStatement(true, null);
  44. this.setColour("#d42b03");
  45. this.setTooltip("");
  46. this.setHelpUrl("");
  47. }
  48. };
  49. Blockly.Python['ai_k210_led_light_up'] = function (block) {
  50. var dropdown_type = block.getFieldValue('type');
  51. Blockly.Python.definitions_['k210_led_light_def'] = '' + 'from fpioa_manager import *\n' + 'from Maix import GPIO\n' + '\n' + 'fm.register(31, fm.fpioa.GPIO3)\n' + 'fm.register(32, fm.fpioa.GPIO4)\n' + '\n' + '_led_red=GPIO(GPIO.GPIO3,GPIO.OUT)\n' + '_led_blue=GPIO(GPIO.GPIO4,GPIO.OUT)\n' + '\n'; // TODO: Assemble Python into code variable.
  52. var code = '_led_' + dropdown_type + '.value(1)\n';
  53. return code;
  54. };
  55. Blockly.Blocks['ai_k210_led_light_off'] = {
  56. init: function init() {
  57. this.appendDummyInput().appendField(Blockly.Msg.ai_basic_led_set).appendField(new Blockly.FieldDropdown([[Blockly.Msg.ai_basic_led_blue, "blue"], [Blockly.Msg.ai_basic_led_red, "red"]]), "type").appendField(Blockly.Msg.ai_basic_led_off);
  58. this.setPreviousStatement(true, null);
  59. this.setNextStatement(true, null);
  60. this.setColour("#d42b03");
  61. this.setTooltip("");
  62. this.setHelpUrl("");
  63. }
  64. };
  65. Blockly.Python['ai_k210_led_light_off'] = function (block) {
  66. var dropdown_type = block.getFieldValue('type');
  67. Blockly.Python.definitions_['k210_led_light_def'] = '' + 'from fpioa_manager import *\n' + 'from Maix import GPIO\n' + '\n' + 'fm.register(31, fm.fpioa.GPIO3)\n' + 'fm.register(32, fm.fpioa.GPIO4)\n' + '\n' + '_led_red=GPIO(GPIO.GPIO3,GPIO.OUT)\n' + '_led_blue=GPIO(GPIO.GPIO4,GPIO.OUT)\n' + '\n'; // TODO: Assemble Python into code variable.
  68. var code = '_led_' + dropdown_type + '.value(0)\n';
  69. return code;
  70. };
  71. /*
  72. _ ___ ___ ____
  73. / \ |_ _| |_ _|_ __ ___ __ _ __ _ ___ | _ \ _ __ ___ ___ ___ ___ ___
  74. / _ \ | | | || '_ ` _ \ / _` |/ _` |/ _ \ | |_) | '__/ _ \ / __/ _ \/ __/ __|
  75. / ___ \ | | | || | | | | | (_| | (_| | __/ | __/| | | (_) | (_| __/\__ \__ \
  76. /_/ \_\___| |___|_| |_| |_|\__,_|\__, |\___| |_| |_| \___/ \___\___||___/___/
  77. |___/
  78. */
  79. Blockly.Blocks["ai_lcd_screeninit"] = {
  80. init: function init() {
  81. this.appendDummyInput().appendField(new Blockly.FieldImage("blockly/media/screen_init_header.png", 45, 45, {
  82. alt: "*",
  83. flipRtl: "FALSE"
  84. }));
  85. this.appendDummyInput().appendField(Blockly.Msg.image_process_lcd_init);
  86. this.setInputsInline(false);
  87. this.setPreviousStatement(true);
  88. this.setNextStatement(true);
  89. this.setColour("#5cb2d6");
  90. this.setTooltip('');
  91. this.setHelpUrl('');
  92. }
  93. };
  94. Blockly.Python.ai_lcd_screeninit = function (block) {
  95. var checkbox_name = block.getFieldValue('DEGREE'); //var dropdown_name = block.getFieldValue('TextCheckBox') == 'TRUE' ? "True" : "False";
  96. Blockly.Python.definitions_.import_lcd = "import lcd";
  97. Blockly.Python.definitions_.import_image = "import image";
  98. var _code = "lcd.init(type=1,freq=15000000,width=240,height=240,color=(0,0,0))\n";
  99. _code += "lcd.rotation(1)\n";
  100. _code += "lcd.clear(lcd.BLACK)\n";
  101. return _code;
  102. ;
  103. };
  104. Blockly.Blocks['ai_lcd_rotation'] = {
  105. init: function init() {
  106. this.appendDummyInput().appendField(Blockly.Msg.image_process_set_lcd_rotation).appendField(new Blockly.FieldDropdown([["0°", "1"], ["90°", "2"], ["180°", "3"], ["270°", "0"]]), "DEGREE");
  107. this.setInputsInline(true);
  108. this.setPreviousStatement(true, null);
  109. this.setNextStatement(true, null);
  110. this.setColour("#5bb2d6");
  111. this.setTooltip('');
  112. this.setHelpUrl('');
  113. }
  114. };
  115. Blockly.Python.ai_lcd_rotation = function (block) {
  116. var dropdown_name = block.getFieldValue('DEGREE');
  117. var _code = "lcd.rotation(" + dropdown_name + ")\n";
  118. return _code;
  119. ;
  120. };
  121. Blockly.Blocks['ai_lcd_filp'] = {
  122. init: function init() {
  123. this.appendDummyInput().appendField(Blockly.Msg.image_process_set_lcd_mirror_flip).appendField(new Blockly.FieldCheckbox('TRUE'), 'TextCheckBox');
  124. this.setInputsInline(true);
  125. this.setPreviousStatement(true, null);
  126. this.setNextStatement(true, null);
  127. this.setColour("#5bb2d6");
  128. this.setTooltip('');
  129. this.setHelpUrl('');
  130. }
  131. };
  132. Blockly.Python.ai_lcd_filp = function (block) {
  133. var _tf = block.getFieldValue('TextCheckBox') == 'TRUE' ? "True" : "False";
  134. var _code = "lcd.mirror(" + _tf + ")\n";
  135. return _code;
  136. };
  137. Blockly.Blocks['ai_lcd_screen'] = {
  138. init: function init() {
  139. this.appendDummyInput().appendField(Blockly.Msg.image_process_set_filled_screen_color).appendField(new Blockly.FieldDropdown([[Blockly.Msg.image_process_set_filled_screen_color_red, "RED"], [Blockly.Msg.image_process_set_filled_screen_color_green, "GREEN"], [Blockly.Msg.image_process_set_filled_screen_color_blue, "BLUE"], [Blockly.Msg.image_process_set_filled_screen_color_purple, "PURPLE"], [Blockly.Msg.image_process_set_filled_screen_color_cyan, "CYAN"], [Blockly.Msg.image_process_set_filled_screen_color_orange, "ORANGE"], [Blockly.Msg.image_process_set_filled_screen_color_yellow, "YELLOW"], [Blockly.Msg.image_process_set_filled_screen_color_black, "BLACK"], [Blockly.Msg.image_process_set_filled_screen_color_white, "WHITE"]]), "COLOR");
  140. this.setInputsInline(true);
  141. this.setPreviousStatement(true, null);
  142. this.setNextStatement(true, null);
  143. this.setColour("#5bb2d6");
  144. this.setTooltip('');
  145. this.setHelpUrl('');
  146. }
  147. };
  148. Blockly.Python.ai_lcd_screen = function (block) {
  149. var colour_name = block.getFieldValue('COLOR');
  150. var _code = "lcd.clear(lcd." + colour_name + ")\n";
  151. return _code;
  152. };
  153. Blockly.Blocks['ai_lcd_fill_screen_with_rgb'] = {
  154. init: function init() {
  155. this.appendDummyInput().appendField(Blockly.Msg.image_process_set_filled_screen_color);
  156. this.appendValueInput("rgb_value").setCheck(null).appendField("");
  157. this.setInputsInline(true);
  158. this.setPreviousStatement(true, null);
  159. this.setNextStatement(true, null);
  160. this.setColour("#5bb2d6");
  161. this.setTooltip("");
  162. this.setHelpUrl("");
  163. }
  164. };
  165. Blockly.Python['ai_lcd_fill_screen_with_rgb'] = function (block) {
  166. var value_name = Blockly.Python.valueToCode(block, 'rgb_value', Blockly.Python.ORDER_ATOMIC); // TODO: Assemble Python into code variable.
  167. var code = 'lcd.clear(' + value_name + ')\n';
  168. return code;
  169. };
  170. Blockly.Blocks['ai_lcd_clear'] = {
  171. init: function init() {
  172. this.appendDummyInput().appendField(Blockly.Msg.image_process_clear_lcd);
  173. this.setInputsInline(true);
  174. this.setPreviousStatement(true, null);
  175. this.setNextStatement(true, null);
  176. this.setColour("#5bb2d6");
  177. this.setTooltip('');
  178. this.setHelpUrl('');
  179. }
  180. };
  181. Blockly.Python.ai_lcd_clear = function (block) {
  182. var _code = "lcd.clear(lcd.BLACK)\n";
  183. return _code;
  184. };
  185. Blockly.Blocks['ai_lcd_rgb_value_input'] = {
  186. init: function init() {
  187. this.appendDummyInput().appendField(Blockly.Msg.image_process_rgb_r);
  188. this.appendValueInput("rgb_value_r").setCheck(null).appendField("");
  189. this.appendDummyInput().appendField(Blockly.Msg.image_process_rgb_g);
  190. this.appendValueInput("rgb_value_g").setCheck(null).appendField("");
  191. this.appendDummyInput().appendField(Blockly.Msg.image_process_rgb_b);
  192. this.appendValueInput("rgb_value_b").setCheck(null).appendField("");
  193. this.setInputsInline(true);
  194. this.setOutput(true, null);
  195. this.setColour("#5bb2d6");
  196. this.setTooltip("");
  197. this.setHelpUrl("");
  198. }
  199. };
  200. Blockly.Python['ai_lcd_rgb_value_input'] = function (block) {
  201. var value_rgb_value_r = Blockly.Python.valueToCode(block, 'rgb_value_r', Blockly.Python.ORDER_ATOMIC);
  202. var value_rgb_value_g = Blockly.Python.valueToCode(block, 'rgb_value_g', Blockly.Python.ORDER_ATOMIC);
  203. var value_rgb_value_b = Blockly.Python.valueToCode(block, 'rgb_value_b', Blockly.Python.ORDER_ATOMIC); // TODO: Assemble Python into code variable.
  204. var code = '' + value_rgb_value_r + ',' + value_rgb_value_g + ',' + value_rgb_value_b + ''; // TODO: Change ORDER_NONE to the correct strength.
  205. return [code, Blockly.Python.ORDER_NONE];
  206. };
  207. Blockly.Blocks.ai_lcd_XY = {
  208. init: function init() {
  209. var _input = this.appendDummyInput();
  210. this.setHelpUrl(Blockly.Msg.LOGIC_OPERATION_HELPURL);
  211. this.setColour("#5bb2d6");
  212. this.setOutput(!0, "Boolean");
  213. _input.appendField(Blockly.Msg.image_process_xy_x);
  214. this.appendValueInput("A").setCheck("Number");
  215. _input = this.appendDummyInput();
  216. _input.appendField(Blockly.Msg.image_process_xy_y);
  217. this.appendValueInput("B").setCheck("Number");
  218. this.setInputsInline(!0);
  219. }
  220. };
  221. Blockly.Python.ai_lcd_XY = function (block) {
  222. var _x = Blockly.Python.valueToCode(block, "A", Blockly.Python.ORDER_ATOMIC);
  223. var _y = Blockly.Python.valueToCode(block, "B", Blockly.Python.ORDER_ATOMIC);
  224. var code = "" + _x + ", " + _y + "";
  225. return [code, Blockly.Python.ORDER_ATOMIC];
  226. };
  227. Blockly.Blocks.ai_lcd_WH = {
  228. init: function init() {
  229. var _input = this.appendDummyInput();
  230. this.setHelpUrl(Blockly.Msg.LOGIC_OPERATION_HELPURL);
  231. this.setColour("#5bb2d6");
  232. this.setOutput(!0, "Boolean");
  233. _input.appendField(Blockly.Msg.image_process_wh_width);
  234. this.appendValueInput("A").setCheck("Number");
  235. _input = this.appendDummyInput();
  236. _input.appendField(Blockly.Msg.image_process_wh_height);
  237. this.appendValueInput("B").setCheck("Number");
  238. this.setInputsInline(!0);
  239. }
  240. };
  241. Blockly.Python.ai_lcd_WH = function (block) {
  242. var _x = Blockly.Python.valueToCode(block, "A", Blockly.Python.ORDER_ATOMIC);
  243. var _y = Blockly.Python.valueToCode(block, "B", Blockly.Python.ORDER_ATOMIC);
  244. var code = "" + _x + ", " + _y + "";
  245. return [code, Blockly.Python.ORDER_ATOMIC];
  246. };
  247. Blockly.Blocks['ai_lcd_colortext'] = {
  248. init: function init() {
  249. this.appendDummyInput().appendField(new Blockly.FieldImage("blockly/media/lcd_draw_text.png", 45, 45, {
  250. alt: "*",
  251. flipRtl: "FALSE"
  252. }));
  253. this.appendDummyInput().appendField(Blockly.Msg.image_process_lcd_show_text);
  254. this.appendDummyInput().appendField(Blockly.Msg.image_process_lcd_show_text_color).appendField(new Blockly.FieldDropdown([[Blockly.Msg.image_process_lcd_show_text_color_white, "WHITE"], [Blockly.Msg.image_process_lcd_show_text_color_black, "BLACK"], [Blockly.Msg.image_process_lcd_show_text_color_red, "RED"], [Blockly.Msg.image_process_lcd_show_text_color_green, "GREEN"], [Blockly.Msg.image_process_lcd_show_text_color_blue, "BLUE"], [Blockly.Msg.image_process_lcd_show_text_color_purple, "PURPLE"], [Blockly.Msg.image_process_lcd_show_text_color_cyan, "CYAN"], [Blockly.Msg.image_process_lcd_show_text_color_orange, "ORANGE"], [Blockly.Msg.image_process_lcd_show_text_color_yellow, "YELLOW"]]), "COLOR");
  255. this.appendDummyInput().appendField(Blockly.Msg.image_process_lcd_show_text_bg_color).appendField(new Blockly.FieldDropdown([[Blockly.Msg.image_process_lcd_show_text_color_black, "BLACK"], [Blockly.Msg.image_process_lcd_show_text_color_white, "WHITE"], [Blockly.Msg.image_process_lcd_show_text_color_red, "RED"], [Blockly.Msg.image_process_lcd_show_text_color_green, "GREEN"], [Blockly.Msg.image_process_lcd_show_text_color_blue, "BLUE"], [Blockly.Msg.image_process_lcd_show_text_color_purple, "PURPLE"], [Blockly.Msg.image_process_lcd_show_text_color_cyan, "CYAN"], [Blockly.Msg.image_process_lcd_show_text_color_orange, "ORANGE"], [Blockly.Msg.image_process_lcd_show_text_color_yellow, "YELLOW"]]), "BCOLOR");
  256. this.appendValueInput("CONTENT").setCheck("String").appendField(Blockly.Msg.image_process_text_content);
  257. /* this.appendDummyInput()
  258. .appendField(Blockly.Msg.LCDDT); */
  259. this.appendValueInput("POSA").setCheck("String").appendField(Blockly.Msg.image_process_text_start_coord);
  260. this.setPreviousStatement(true, null);
  261. this.setNextStatement(true, null);
  262. this.setColour("#5bb2d6");
  263. this.setTooltip('');
  264. this.setHelpUrl('');
  265. }
  266. };
  267. Blockly.Python['ai_lcd_colortext'] = function (block) {
  268. var color = block.getFieldValue("COLOR");
  269. var bcolor = block.getFieldValue("BCOLOR");
  270. var content = Blockly.Python.valueToCode(block, 'CONTENT', Blockly.Python.ORDER_ATOMIC);
  271. var xy = Blockly.Python.valueToCode(block, 'POSA', Blockly.Python.ORDER_ATOMIC); //var size = Blockly.Python.valueToCode(block, 'POSB', Blockly.Python.ORDER_ATOMIC);
  272. var _code = "lcd.draw_string(" + xy + ", " + content + ", lcd." + color + ", lcd." + bcolor + ")\n"; //, scale=" + size + "
  273. // return [_code, Blockly.Python.ORDER_ATOMIC]
  274. return _code;
  275. };
  276. Blockly.Blocks["ai_lcd_createnonecarvas"] = {
  277. init: function init() {
  278. this.appendDummyInput().appendField(Blockly.Msg.image_process_create_blank_canvas).appendField(new Blockly.FieldVariable("canvas"), "varitem");
  279. this.appendValueInput("wh").setCheck(null).appendField(Blockly.Msg.image_process_text_size); // this.appendDummyInput()
  280. // .appendField(Blockly.Msg.LCDDCC_F)
  281. // .appendField(new Blockly.FieldCheckbox("TRUE"), "check")
  282. // .appendField(Blockly.Msg.LCDDCC_I)
  283. // .appendField(new Blockly.FieldTextInput(""), "text");
  284. this.setInputsInline(true);
  285. this.setPreviousStatement(true, null);
  286. this.setNextStatement(true, null);
  287. this.setColour("#5cb2d6");
  288. this.setTooltip('');
  289. this.setHelpUrl('');
  290. }
  291. };
  292. Blockly.Python.ai_lcd_createnonecarvas = function (block) {
  293. var variable_name = Blockly.Python.variableDB_.getName(block.getFieldValue('varitem'), Blockly.Variables.NAME_TYPE);
  294. var value_wh = Blockly.Python.valueToCode(block, 'wh', Blockly.Python.ORDER_ATOMIC);
  295. var _code = variable_name + " = image.Image(size=(" + value_wh + "))\n";
  296. return _code;
  297. };
  298. Blockly.Blocks["ai_lcd_fillcanvas"] = {
  299. init: function init() {
  300. this.appendDummyInput().appendField(Blockly.Msg.image_process_text_let_canvas).appendField(new Blockly.FieldVariable("canvas"), "varitem");
  301. this.appendValueInput("color").setCheck(null).appendField(Blockly.Msg.image_process_text_let_canvas_filled_with_color);
  302. this.setInputsInline(true);
  303. this.setPreviousStatement(true, null);
  304. this.setNextStatement(true, null);
  305. this.setColour("#5cb2d6");
  306. this.setTooltip('');
  307. this.setHelpUrl('');
  308. }
  309. };
  310. Blockly.Python.ai_lcd_fillcanvas = function (block) {
  311. var variable_name = Blockly.Python.variableDB_.getName(block.getFieldValue('varitem'), Blockly.Variables.NAME_TYPE);
  312. var value_color = Blockly.Python.valueToCode(block, 'color', Blockly.Python.ORDER_ATOMIC);
  313. var _code = variable_name + '.draw_rectangle(0,0, ' + variable_name + '.width(),' + variable_name + '.height(), color=' + value_color + ', thickness=1, fill=True)\n';
  314. return _code;
  315. };
  316. Blockly.Blocks["ai_lcd_createcarvas"] = {
  317. init: function init() {
  318. this.appendDummyInput().appendField(Blockly.Msg.image_process_create_image_canvas).appendField(new Blockly.FieldVariable("canvas"), "varitem");
  319. this.appendDummyInput().appendField(Blockly.Msg.image_process_create_image_canvas_path).appendField(new Blockly.FieldTextInput("/sd/preset/images/splash_bg.jpg"), "text");
  320. this.setPreviousStatement(true, null);
  321. this.setNextStatement(true, null);
  322. this.setColour("#5cb2d6");
  323. this.setTooltip('');
  324. this.setHelpUrl('');
  325. }
  326. };
  327. Blockly.Python.ai_lcd_createcarvas = function (block) {
  328. var variable_name = Blockly.Python.variableDB_.getName(block.getFieldValue('varitem'), Blockly.Variables.NAME_TYPE);
  329. var checkbox_name = block.getFieldValue('check') == 'TRUE' ? "True" : "False";
  330. var text_name = block.getFieldValue('text');
  331. var _code = variable_name + " = image.Image(\"" + text_name + "\")\n";
  332. return _code;
  333. };
  334. Blockly.Blocks['ai_lcd_showcarvas_set_cord'] = {
  335. init: function init() {
  336. this.appendDummyInput().appendField(Blockly.Msg.image_process_text_set_canvas_setup).appendField(new Blockly.FieldVariable("canvas"), "varitem");
  337. this.appendValueInput("xy").setCheck(null).appendField(Blockly.Msg.image_process_text_start_coord_as);
  338. this.setInputsInline(true);
  339. this.setPreviousStatement(true, null);
  340. this.setNextStatement(true, null);
  341. this.setColour("#5cb2d6");
  342. this.setTooltip("");
  343. this.setHelpUrl("");
  344. }
  345. };
  346. Blockly.Python.ai_lcd_showcarvas_set_cord = function (block) {
  347. var variable_name = Blockly.Python.variableDB_.getName(block.getFieldValue('varitem'), Blockly.Variables.NAME_TYPE);
  348. var value_name = Blockly.Python.valueToCode(block, 'xy', Blockly.Python.ORDER_ATOMIC); // TODO: Assemble Python into code variable.
  349. var code = "_" + variable_name + "_x, _" + variable_name + "_y = " + value_name + "\n";
  350. return code;
  351. };
  352. Blockly.Blocks['ai_lcd_showcarvas_set_display'] = {
  353. init: function init() {
  354. this.appendDummyInput().appendField(Blockly.Msg.image_process_show_canvas).appendField(new Blockly.FieldVariable("canvas"), "varitem");
  355. this.setInputsInline(false);
  356. this.setPreviousStatement(true, null);
  357. this.setNextStatement(true, null);
  358. this.setColour("#5cb2d6");
  359. this.setTooltip("");
  360. this.setHelpUrl("");
  361. }
  362. };
  363. Blockly.Python.ai_lcd_showcarvas_set_display = function (block) {
  364. var variable_name = Blockly.Python.variableDB_.getName(block.getFieldValue('varitem'), Blockly.Variables.NAME_TYPE); // TODO: Assemble Python into code variable.
  365. var code = "lcd.display(" + variable_name + ", oft=(_" + variable_name + "_x,_" + variable_name + "_y))\n";
  366. return code;
  367. };
  368. Blockly.Blocks['ai_lcd_showcarvas'] = {
  369. init: function init() {
  370. this.appendDummyInput().appendField(Blockly.Msg.image_process_show_canvas).appendField(new Blockly.FieldVariable("canvas"), "varitem");
  371. this.appendValueInput("xy").setCheck(null).appendField(Blockly.Msg.image_process_text_start_coord);
  372. this.setInputsInline(false);
  373. this.setPreviousStatement(true, null);
  374. this.setNextStatement(true, null);
  375. this.setColour("#5cb2d6");
  376. this.setTooltip("");
  377. this.setHelpUrl("");
  378. }
  379. };
  380. Blockly.Python.ai_lcd_showcarvas = function (block) {
  381. var variable_name = Blockly.Python.variableDB_.getName(block.getFieldValue('varitem'), Blockly.Variables.NAME_TYPE);
  382. var value_name = Blockly.Python.valueToCode(block, 'xy', Blockly.Python.ORDER_ATOMIC); // TODO: Assemble Python into code variable.
  383. var code = "lcd.display(" + variable_name + ", oft=(" + value_name + "))\n";
  384. return code;
  385. };
  386. Blockly.Blocks['ai_lcd_clearcanvas'] = {
  387. init: function init() {
  388. this.appendDummyInput().appendField(Blockly.Msg.image_process_clear_canvas_1).appendField(new Blockly.FieldVariable("canvas"), "varitem").appendField(Blockly.Msg.image_process_clear_canvas_2);
  389. this.setPreviousStatement(true, null);
  390. this.setNextStatement(true, null);
  391. this.setColour("#5bb2d6");
  392. this.setTooltip('');
  393. this.setHelpUrl('');
  394. }
  395. };
  396. Blockly.Python.ai_lcd_clearcanvas = function (block) {
  397. var variable_name = Blockly.Python.variableDB_.getName(block.getFieldValue('varitem'), Blockly.Variables.NAME_TYPE);
  398. var _code = variable_name + ".clear()\n";
  399. return _code;
  400. ;
  401. };
  402. Blockly.Blocks['ai_lcd_textcarvas'] = {
  403. init: function init() {
  404. this.appendDummyInput().appendField(new Blockly.FieldImage("blockly/media/lcd_draw_text.png", 45, 45, {
  405. alt: "*",
  406. flipRtl: "FALSE"
  407. }));
  408. this.appendDummyInput().appendField(Blockly.Msg.image_process_text_on_canvas).appendField(new Blockly.FieldVariable("canvas"), "varitem").appendField(Blockly.Msg.image_process_text_on_draw + Blockly.Msg.image_process_draw_text);
  409. this.appendValueInput("POSA").setCheck("String").appendField(Blockly.Msg.image_process_text_start_coord);
  410. this.appendValueInput("CONTENT").setCheck("String").appendField(Blockly.Msg.image_process_text_content);
  411. this.appendValueInput("COLOR").setCheck("String").appendField(Blockly.Msg.image_process_text_color);
  412. this.appendValueInput("Scale").setCheck("Number").appendField(Blockly.Msg.image_process_draw_text_font_size);
  413. this.appendDummyInput().appendField(Blockly.Msg.image_process_draw_text_if_monospace).appendField(new Blockly.FieldCheckbox("FALSE"), "bool");
  414. this.setInputsInline(false);
  415. this.setPreviousStatement(true);
  416. this.setNextStatement(true);
  417. this.setColour("#5bb2d6");
  418. this.setTooltip('');
  419. this.setHelpUrl('');
  420. }
  421. };
  422. Blockly.Python.ai_lcd_textcarvas = function (block) {
  423. var color = Blockly.Python.valueToCode(block, 'COLOR', Blockly.Python.ORDER_ATOMIC);
  424. if (color.charAt(0) == '#') {
  425. var d = 0,
  426. e = 0,
  427. f = 0;
  428. try {
  429. 7 == color.length && (d = parseInt(color.substring(1, 3), 16), e = parseInt(color.substring(3, 5), 16), f = parseInt(color.substring(5, 7), 16));
  430. } catch (g) {}
  431. var bool = block.getFieldValue('bool') == "TRUE" ? "True" : "False"; // var bool = Blockly.Python.valueToCode(block, 'POSC', Blockly.Python.ORDER_ATOMIC) == "TRUE" ? "True" : "False";
  432. var content = Blockly.Python.valueToCode(block, 'CONTENT', Blockly.Python.ORDER_ATOMIC);
  433. var xy = Blockly.Python.valueToCode(block, 'POSA', Blockly.Python.ORDER_ATOMIC);
  434. var size = Blockly.Python.valueToCode(block, 'Scale', Blockly.Python.ORDER_ATOMIC);
  435. var variable_name = Blockly.Python.variableDB_.getName(block.getFieldValue('varitem'), Blockly.Variables.NAME_TYPE);
  436. var _code = variable_name + ".draw_string(" + xy + ", " + content + ", color=(" + d + "," + e + "," + f + "), scale=" + size + ", mono_space=" + bool + ")\n";
  437. } else if (color.charAt(0) != '#') {
  438. var d = 0,
  439. e = 0,
  440. f = 0;
  441. try {
  442. 7 == color.length && (d = parseInt(color.substring(1, 3), 16), e = parseInt(color.substring(3, 5), 16), f = parseInt(color.substring(5, 7), 16));
  443. } catch (g) {}
  444. var bool = block.getFieldValue('bool') == "TRUE" ? "True" : "False"; // var bool = Blockly.Python.valueToCode(block, 'POSC', Blockly.Python.ORDER_ATOMIC) == "TRUE" ? "True" : "False";
  445. var content = Blockly.Python.valueToCode(block, 'CONTENT', Blockly.Python.ORDER_ATOMIC);
  446. var xy = Blockly.Python.valueToCode(block, 'POSA', Blockly.Python.ORDER_ATOMIC);
  447. var size = Blockly.Python.valueToCode(block, 'Scale', Blockly.Python.ORDER_ATOMIC);
  448. var variable_name = Blockly.Python.variableDB_.getName(block.getFieldValue('varitem'), Blockly.Variables.NAME_TYPE);
  449. var _code = variable_name + ".draw_string(" + xy + ", " + content + ", color=" + color + ", scale=" + size + ", mono_space=" + bool + ")\n";
  450. }
  451. return _code;
  452. };
  453. Blockly.Blocks['ai_lcd_characterscarvas'] = {
  454. init: function () {
  455. this.appendDummyInput()
  456. .appendField(new Blockly.FieldImage("blockly/media/lcd_draw_hanzi_header.png", 45, 45, { alt: "*", flipRtl: "FALSE" }));
  457. this.appendDummyInput()
  458. .appendField(Blockly.Msg.image_process_text_on_canvas)
  459. .appendField(new Blockly.FieldVariable("canvas"), "varitem")
  460. .appendField(Blockly.Msg.image_process_text_on_draw + Blockly.Msg.image_process_draw_characters);
  461. this.appendValueInput("POSA")
  462. .setCheck("String")
  463. .appendField(Blockly.Msg.image_process_text_start_coord);
  464. this.appendValueInput("CONTENT")
  465. .setCheck("String")
  466. .appendField(Blockly.Msg.image_process_text_content);
  467. this.appendValueInput("COLOR")
  468. .setCheck("String")
  469. .appendField(Blockly.Msg.image_process_text_color);
  470. this.appendValueInput("Scale")
  471. .setCheck("Number")
  472. .appendField(Blockly.Msg.image_process_draw_text_font_size);
  473. this.appendDummyInput()
  474. .appendField(Blockly.Msg.image_process_draw_text_if_monospace)
  475. .appendField(new Blockly.FieldCheckbox("FALSE"), "bool");
  476. this.setInputsInline(false);
  477. this.setPreviousStatement(true);
  478. this.setNextStatement(true);
  479. this.setColour("#5bb2d6");
  480. this.setTooltip('');
  481. this.setHelpUrl('');
  482. }
  483. };
  484. Blockly.Python.ai_lcd_characterscarvas = function (block) {
  485. var color = Blockly.Python.valueToCode(block, 'COLOR', Blockly.Python.ORDER_ATOMIC);
  486. if (color.charAt(0) == '#') {
  487. var d = 0,
  488. e = 0,
  489. f = 0;
  490. try {
  491. 7 == color.length && (d = parseInt(color.substring(1, 3), 16),
  492. e = parseInt(color.substring(3, 5), 16),
  493. f = parseInt(color.substring(5, 7), 16))
  494. } catch (g) { }
  495. var bool = block.getFieldValue('bool') == "TRUE" ? "True" : "False";
  496. // var bool = Blockly.Python.valueToCode(block, 'POSC', Blockly.Python.ORDER_ATOMIC) == "TRUE" ? "True" : "False";
  497. var content = Blockly.Python.valueToCode(block, 'CONTENT', Blockly.Python.ORDER_ATOMIC);
  498. var xy = Blockly.Python.valueToCode(block, 'POSA', Blockly.Python.ORDER_ATOMIC);
  499. var size = Blockly.Python.valueToCode(block, 'Scale', Blockly.Python.ORDER_ATOMIC);
  500. var variable_name = Blockly.Python.variableDB_.getName(block.getFieldValue('varitem'), Blockly.Variables.NAME_TYPE);
  501. var _code = variable_name + ".draw_string(" + xy + ", " + content + ", color=(" + d + "," + e + "," + f + "), scale=" + size + ", mono_space=" + bool + ")\n";
  502. } else if (color.charAt(0) != '#') {
  503. var d = 0,
  504. e = 0,
  505. f = 0;
  506. try {
  507. 7 == color.length && (d = parseInt(color.substring(1, 3), 16),
  508. e = parseInt(color.substring(3, 5), 16),
  509. f = parseInt(color.substring(5, 7), 16))
  510. } catch (g) { }
  511. var bool = block.getFieldValue('bool') == "TRUE" ? "True" : "False";
  512. // var bool = Blockly.Python.valueToCode(block, 'POSC', Blockly.Python.ORDER_ATOMIC) == "TRUE" ? "True" : "False";
  513. var content = Blockly.Python.valueToCode(block, 'CONTENT', Blockly.Python.ORDER_ATOMIC);
  514. var xy = Blockly.Python.valueToCode(block, 'POSA', Blockly.Python.ORDER_ATOMIC);
  515. var size = Blockly.Python.valueToCode(block, 'Scale', Blockly.Python.ORDER_ATOMIC);
  516. var variable_name = Blockly.Python.variableDB_.getName(block.getFieldValue('varitem'), Blockly.Variables.NAME_TYPE);
  517. var _code = variable_name + ".draw_string(" + xy + ", " + content + ", color=" + color + ", scale=" + size + ", mono_space=" + bool + ")\n";
  518. }
  519. return _code;
  520. }
  521. Blockly.Blocks['ai_lcd_linecarvas'] = {
  522. init: function init() {
  523. this.appendDummyInput().appendField(new Blockly.FieldImage("blockly/media/lcd_draw_line.png", 45, 45, {
  524. alt: "*",
  525. flipRtl: "FALSE"
  526. }));
  527. this.appendDummyInput().appendField(Blockly.Msg.image_process_text_on_canvas).appendField(new Blockly.FieldVariable("canvas"), "varitem").appendField(Blockly.Msg.image_process_text_on_draw + Blockly.Msg.image_process_draw_line);
  528. this.appendValueInput("POSA").setCheck("String").appendField(Blockly.Msg.image_process_text_start_coord);
  529. this.appendValueInput("POSB").setCheck("String").appendField(Blockly.Msg.image_process_text_end_coord);
  530. this.appendValueInput("COLOR").setCheck("String").appendField(Blockly.Msg.image_process_text_color);
  531. this.appendValueInput("Scale").setCheck("Number").appendField(Blockly.Msg.image_process_text_thick);
  532. this.setInputsInline(false);
  533. this.setPreviousStatement(true);
  534. this.setNextStatement(true);
  535. this.setColour("#5bb2d6");
  536. this.setTooltip('');
  537. this.setHelpUrl('');
  538. }
  539. };
  540. Blockly.Python.ai_lcd_linecarvas = function (block) {
  541. var color = Blockly.Python.valueToCode(block, 'COLOR', Blockly.Python.ORDER_ATOMIC);
  542. if (color.charAt(0) == '#') {
  543. var d = 0,
  544. e = 0,
  545. f = 0;
  546. try {
  547. 7 == color.length && (d = parseInt(color.substring(1, 3), 16), e = parseInt(color.substring(3, 5), 16), f = parseInt(color.substring(5, 7), 16));
  548. } catch (g) {}
  549. var size = Blockly.Python.valueToCode(block, 'Scale', Blockly.Python.ORDER_ATOMIC);
  550. var xy = Blockly.Python.valueToCode(block, 'POSA', Blockly.Python.ORDER_ATOMIC);
  551. var xy2 = Blockly.Python.valueToCode(block, 'POSB', Blockly.Python.ORDER_ATOMIC);
  552. var variable_name = Blockly.Python.variableDB_.getName(block.getFieldValue('varitem'), Blockly.Variables.NAME_TYPE);
  553. var _code = variable_name + ".draw_line(" + xy + ", " + xy2 + ", color=(" + d + "," + e + "," + f + "), thickness=" + size + ")\n";
  554. } else if (color.charAt(0) != '#') {
  555. var d = 0,
  556. e = 0,
  557. f = 0;
  558. try {
  559. 7 == color.length && (d = parseInt(color.substring(1, 3), 16), e = parseInt(color.substring(3, 5), 16), f = parseInt(color.substring(5, 7), 16));
  560. } catch (g) {}
  561. var size = Blockly.Python.valueToCode(block, 'Scale', Blockly.Python.ORDER_ATOMIC);
  562. var xy = Blockly.Python.valueToCode(block, 'POSA', Blockly.Python.ORDER_ATOMIC);
  563. var xy2 = Blockly.Python.valueToCode(block, 'POSB', Blockly.Python.ORDER_ATOMIC);
  564. var variable_name = Blockly.Python.variableDB_.getName(block.getFieldValue('varitem'), Blockly.Variables.NAME_TYPE);
  565. var _code = variable_name + ".draw_line(" + xy + ", " + xy2 + ", color=" + color + ", thickness=" + size + ")\n";
  566. }
  567. return _code;
  568. };
  569. Blockly.Blocks['ai_lcd_ractanglecarvas'] = {
  570. init: function init() {
  571. // this.appendDummyInput()
  572. // .appendField(
  573. // new Blockly.FieldImage("./../blockly/media/line.png", 25, 25, "15"));
  574. this.appendDummyInput().appendField(new Blockly.FieldImage("blockly/media/lcd_draw_rectangle.png", 45, 45, {
  575. alt: "*",
  576. flipRtl: "FALSE"
  577. }));
  578. this.appendDummyInput().appendField(Blockly.Msg.image_process_text_on_canvas).appendField(new Blockly.FieldVariable("canvas"), "varitem").appendField(Blockly.Msg.image_process_text_on_draw).appendField(new Blockly.FieldDropdown([[Blockly.Msg.image_process_text_filled, "fillrect"], [Blockly.Msg.image_process_text_stroked, "rect"]]), "rect_type").appendField(Blockly.Msg.image_process_draw_rectangle_text);
  579. this.appendValueInput("POSA").setCheck("String").appendField(Blockly.Msg.image_process_text_start_coord);
  580. this.appendValueInput("POSB").setCheck("String").appendField(Blockly.Msg.image_process_text_size);
  581. this.appendValueInput("COLOR").setCheck("String").appendField(Blockly.Msg.image_process_text_color);
  582. this.appendValueInput("Scale").setCheck("Number").appendField(Blockly.Msg.image_process_text_thick);
  583. this.setInputsInline(false);
  584. this.setPreviousStatement(true);
  585. this.setNextStatement(true);
  586. this.setColour("#5bb2d6");
  587. this.setTooltip('');
  588. this.setHelpUrl('');
  589. }
  590. };
  591. Blockly.Python.ai_lcd_ractanglecarvas = function (block) {
  592. var color = Blockly.Python.valueToCode(block, 'COLOR', Blockly.Python.ORDER_ATOMIC);
  593. if (color.charAt(0) == '#') {
  594. var d = 0,
  595. e = 0,
  596. f = 0;
  597. try {
  598. 7 == color.length && (d = parseInt(color.substring(1, 3), 16), e = parseInt(color.substring(3, 5), 16), f = parseInt(color.substring(5, 7), 16));
  599. } catch (g) {}
  600. var variable_name = Blockly.Python.variableDB_.getName(block.getFieldValue('varitem'), Blockly.Variables.NAME_TYPE);
  601. var type = block.getFieldValue('rect_type') == "fillrect" ? "True" : "False";
  602. var th = Blockly.Python.valueToCode(block, 'Scale', Blockly.Python.ORDER_ATOMIC);
  603. var xy = Blockly.Python.valueToCode(block, 'POSA', Blockly.Python.ORDER_ATOMIC);
  604. var size = Blockly.Python.valueToCode(block, 'POSB', Blockly.Python.ORDER_ATOMIC);
  605. var _code = variable_name + ".draw_rectangle(" + xy + ", " + size + ", color=(" + d + "," + e + "," + f + "), thickness=" + th + ", fill=" + type + ")\n";
  606. } else if (color.charAt(0) != '#') {
  607. var variable_name = Blockly.Python.variableDB_.getName(block.getFieldValue('varitem'), Blockly.Variables.NAME_TYPE);
  608. var type = block.getFieldValue('rect_type') == "fillrect" ? "True" : "False";
  609. var th = Blockly.Python.valueToCode(block, 'Scale', Blockly.Python.ORDER_ATOMIC);
  610. var xy = Blockly.Python.valueToCode(block, 'POSA', Blockly.Python.ORDER_ATOMIC);
  611. var size = Blockly.Python.valueToCode(block, 'POSB', Blockly.Python.ORDER_ATOMIC);
  612. var _code = variable_name + ".draw_rectangle(" + xy + ", " + size + ", color=" + color + ", thickness=" + th + ", fill=" + type + ")\n";
  613. }
  614. return _code;
  615. };
  616. Blockly.Blocks['ai_lcd_drawcirclecarvas'] = {
  617. init: function init() {
  618. this.appendDummyInput().appendField(new Blockly.FieldImage("blockly/media/lcd_draw_circle.png", 45, 45, {
  619. alt: "*",
  620. flipRtl: "FALSE"
  621. })); // this.appendDummyInput()
  622. // .appendField(
  623. // new Blockly.FieldImage("./../blockly/media/line.png", 25, 25, "15"));
  624. this.appendDummyInput().appendField(Blockly.Msg.image_process_text_on_canvas).appendField(new Blockly.FieldVariable("canvas"), "varitem").appendField(Blockly.Msg.image_process_text_on_draw).appendField(new Blockly.FieldDropdown([[Blockly.Msg.image_process_text_filled, "fillrect"], [Blockly.Msg.image_process_text_stroked, "rect"]]), "rect_type").appendField(Blockly.Msg.image_process_draw_circle_text);
  625. this.appendValueInput("POSA").setCheck("String").appendField(Blockly.Msg.image_process_draw_circle_text_start);
  626. this.appendValueInput("Scale").setCheck("Number").appendField(Blockly.Msg.image_process_text_radius);
  627. this.appendValueInput("COLOR").setCheck("String").appendField(Blockly.Msg.image_process_text_color);
  628. this.appendValueInput("Scale_0").setCheck("Number").appendField(Blockly.Msg.image_process_text_thick);
  629. this.setInputsInline(false);
  630. this.setPreviousStatement(true);
  631. this.setNextStatement(true);
  632. this.setColour("#5bb2d6");
  633. this.setTooltip('');
  634. this.setHelpUrl('');
  635. }
  636. };
  637. Blockly.Python.ai_lcd_drawcirclecarvas = function (block) {
  638. var color = Blockly.Python.valueToCode(block, 'COLOR', Blockly.Python.ORDER_ATOMIC);
  639. if (color.charAt(0) == '#') {
  640. var d = 0,
  641. e = 0,
  642. f = 0;
  643. try {
  644. 7 == color.length && (d = parseInt(color.substring(1, 3), 16), e = parseInt(color.substring(3, 5), 16), f = parseInt(color.substring(5, 7), 16));
  645. } catch (g) {}
  646. var variable_name = Blockly.Python.variableDB_.getName(block.getFieldValue('varitem'), Blockly.Variables.NAME_TYPE);
  647. var type = block.getFieldValue('rect_type') == "fillrect" ? "True" : "False";
  648. var th = Blockly.Python.valueToCode(block, 'Scale', Blockly.Python.ORDER_ATOMIC);
  649. var xy = Blockly.Python.valueToCode(block, 'POSA', Blockly.Python.ORDER_ATOMIC);
  650. var th0 = Blockly.Python.valueToCode(block, 'Scale_0', Blockly.Python.ORDER_ATOMIC);
  651. var _code = variable_name + ".draw_circle(" + xy + ", " + th + ", color=(" + d + ", " + e + ", " + f + "), thickness=" + th0 + ", fill=" + type + ")\n";
  652. } else if (color.charAt(0) != '#') {
  653. var d = 0,
  654. e = 0,
  655. f = 0;
  656. try {
  657. 7 == color.length && (d = parseInt(color.substring(1, 3), 16), e = parseInt(color.substring(3, 5), 16), f = parseInt(color.substring(5, 7), 16));
  658. } catch (g) {}
  659. var variable_name = Blockly.Python.variableDB_.getName(block.getFieldValue('varitem'), Blockly.Variables.NAME_TYPE);
  660. var type = block.getFieldValue('rect_type') == "fillrect" ? "True" : "False";
  661. var th = Blockly.Python.valueToCode(block, 'Scale', Blockly.Python.ORDER_ATOMIC);
  662. var xy = Blockly.Python.valueToCode(block, 'POSA', Blockly.Python.ORDER_ATOMIC);
  663. var th0 = Blockly.Python.valueToCode(block, 'Scale_0', Blockly.Python.ORDER_ATOMIC);
  664. var _code = variable_name + ".draw_circle(" + xy + ", " + th + ", color=" + color + ", thickness=" + th0 + ", fill=" + type + ")\n";
  665. }
  666. return _code;
  667. };
  668. Blockly.Blocks['ai_lcd_draw_cross_sign'] = {
  669. init: function init() {
  670. this.appendDummyInput().appendField(new Blockly.FieldImage("blockly/media/lcd_draw_cross.png", 45, 45, {
  671. alt: "*",
  672. flipRtl: "FALSE"
  673. }));
  674. this.appendDummyInput().appendField(Blockly.Msg.image_process_text_on_canvas).appendField(new Blockly.FieldVariable("canvas"), "varitem").appendField(Blockly.Msg.image_process_draw_cross_title);
  675. this.appendValueInput("xy").setCheck(null).appendField(Blockly.Msg.image_process_draw_cross_centerpos);
  676. this.appendValueInput("size").setCheck(null).appendField(Blockly.Msg.image_process_draw_cross_length);
  677. this.appendValueInput("thickness").setCheck(null).appendField(Blockly.Msg.image_process_draw_cross_thick);
  678. this.appendValueInput("color").setCheck(null).appendField(Blockly.Msg.image_process_draw_cross_color);
  679. this.setInputsInline(false);
  680. this.setPreviousStatement(true, null);
  681. this.setNextStatement(true, null);
  682. this.setColour("#5bb2d6");
  683. this.setTooltip("");
  684. this.setHelpUrl("");
  685. }
  686. };
  687. Blockly.Python['ai_lcd_draw_cross_sign'] = function (block) {
  688. var color = Blockly.Python.valueToCode(block, 'color', Blockly.Python.ORDER_ATOMIC);
  689. if (color.charAt(0) == '#') {
  690. var variable_name = Blockly.Python.variableDB_.getName(block.getFieldValue('varitem'), Blockly.Variables.NAME_TYPE);
  691. var value_xy = Blockly.Python.valueToCode(block, 'xy', Blockly.Python.ORDER_ATOMIC);
  692. var value_size = Blockly.Python.valueToCode(block, 'size', Blockly.Python.ORDER_ATOMIC);
  693. var value_thickness = Blockly.Python.valueToCode(block, 'thickness', Blockly.Python.ORDER_ATOMIC);
  694. var d = 0,
  695. e = 0,
  696. f = 0;
  697. try {
  698. 7 == color.length && (d = parseInt(color.substring(1, 3), 16), e = parseInt(color.substring(3, 5), 16), f = parseInt(color.substring(5, 7), 16));
  699. } catch (g) {} // TODO: Assemble Python into code variable.
  700. var code = variable_name + '.draw_cross(' + value_xy + ', color=(' + d + ', ' + e + ', ' + f + '), size=' + value_size + ', thickness=' + value_thickness + ')\n';
  701. } else if (color.charAt(0) != '#') {
  702. var variable_name = Blockly.Python.variableDB_.getName(block.getFieldValue('varitem'), Blockly.Variables.NAME_TYPE);
  703. var value_xy = Blockly.Python.valueToCode(block, 'xy', Blockly.Python.ORDER_ATOMIC);
  704. var value_size = Blockly.Python.valueToCode(block, 'size', Blockly.Python.ORDER_ATOMIC);
  705. var value_thickness = Blockly.Python.valueToCode(block, 'thickness', Blockly.Python.ORDER_ATOMIC); // TODO: Assemble Python into code variable.
  706. var code = variable_name + '.draw_cross(' + value_xy + ', color=' + color + ', size=' + value_size + ', thickness=' + value_thickness + ')\n';
  707. }
  708. return code;
  709. };
  710. Blockly.Blocks['ai_lcd_draw_arrow_sign'] = {
  711. init: function init() {
  712. this.appendDummyInput().appendField(new Blockly.FieldImage("blockly/media/lcd_draw_arrow.png", 45, 45, {
  713. alt: "*",
  714. flipRtl: "FALSE"
  715. }));
  716. this.appendDummyInput().appendField(Blockly.Msg.image_process_text_on_canvas).appendField(new Blockly.FieldVariable("canvas"), "varitem").appendField(Blockly.Msg.image_process_draw_arrow_title);
  717. this.appendValueInput("xy1").setCheck(null).appendField(Blockly.Msg.image_process_draw_arrow_start);
  718. this.appendValueInput("xy2").setCheck(null).appendField(Blockly.Msg.image_process_draw_arrow_end);
  719. this.appendValueInput("color").setCheck(null).appendField(Blockly.Msg.image_process_draw_arrow_color);
  720. this.appendValueInput("thickness").setCheck(null).appendField(Blockly.Msg.image_process_draw_arrow_thick);
  721. this.setInputsInline(false);
  722. this.setPreviousStatement(true, null);
  723. this.setNextStatement(true, null);
  724. this.setColour("#5bb2d6");
  725. this.setTooltip("");
  726. this.setHelpUrl("");
  727. }
  728. };
  729. Blockly.Python['ai_lcd_draw_arrow_sign'] = function (block) {
  730. // TODO: Assemble Python into code variable.
  731. var color = Blockly.Python.valueToCode(block, 'color', Blockly.Python.ORDER_ATOMIC);
  732. if (color.charAt(0) == '#') {
  733. var variable_name = Blockly.Python.variableDB_.getName(block.getFieldValue('varitem'), Blockly.Variables.NAME_TYPE);
  734. var value_xy1 = Blockly.Python.valueToCode(block, 'xy1', Blockly.Python.ORDER_ATOMIC);
  735. var value_xy2 = Blockly.Python.valueToCode(block, 'xy2', Blockly.Python.ORDER_ATOMIC);
  736. var value_thickness = Blockly.Python.valueToCode(block, 'thickness', Blockly.Python.ORDER_ATOMIC);
  737. var d = 0,
  738. e = 0,
  739. f = 0;
  740. try {
  741. 7 == color.length && (d = parseInt(color.substring(1, 3), 16), e = parseInt(color.substring(3, 5), 16), f = parseInt(color.substring(5, 7), 16));
  742. } catch (g) {} // TODO: Assemble Python into code variable.
  743. var code = variable_name + '.draw_arrow(' + value_xy1 + ',' + value_xy2 + ', color=(' + d + ', ' + e + ', ' + f + '), thickness=' + value_thickness + ')\n';
  744. } else if (color.charAt(0) != '#') {
  745. var variable_name = Blockly.Python.variableDB_.getName(block.getFieldValue('varitem'), Blockly.Variables.NAME_TYPE);
  746. var value_xy1 = Blockly.Python.valueToCode(block, 'xy1', Blockly.Python.ORDER_ATOMIC);
  747. var value_xy2 = Blockly.Python.valueToCode(block, 'xy2', Blockly.Python.ORDER_ATOMIC);
  748. var value_thickness = Blockly.Python.valueToCode(block, 'thickness', Blockly.Python.ORDER_ATOMIC); // TODO: Assemble Python into code variable.
  749. var code = variable_name + '.draw_arrow(' + value_xy1 + ',' + value_xy2 + ', color=(' + color + '), thickness=' + value_thickness + ')\n';
  750. }
  751. return code;
  752. };
  753. Blockly.Blocks['ai_lcd_draw_image_on_canvas'] = {
  754. init: function init() {
  755. this.appendDummyInput().appendField(new Blockly.FieldImage("blockly/media/lcd_draw_image.png", 45, 45, {
  756. alt: "*",
  757. flipRtl: "FALSE"
  758. }));
  759. this.appendDummyInput().appendField(Blockly.Msg.image_process_text_on_canvas).appendField(new Blockly.FieldVariable("canvas"), "varitem").appendField(Blockly.Msg.image_process_draw_image_title);
  760. this.appendValueInput("image_path").setCheck(null).appendField(Blockly.Msg.image_process_draw_image_title_image_path);
  761. this.appendValueInput("xy").setCheck(null).appendField(Blockly.Msg.image_process_text_start_coord);
  762. this.appendValueInput("scale_x").setCheck(null).appendField(Blockly.Msg.image_process_draw_image_scale_x);
  763. this.appendValueInput("scale_y").setCheck(null).appendField(Blockly.Msg.image_process_draw_image_scale_y);
  764. this.setInputsInline(false);
  765. this.setPreviousStatement(true, null);
  766. this.setNextStatement(true, null);
  767. this.setColour("#5bb2d6");
  768. this.setTooltip("");
  769. this.setHelpUrl("");
  770. }
  771. };
  772. Blockly.Python['ai_lcd_draw_image_on_canvas'] = function (block) {
  773. // TODO: Assemble Python into code variable.
  774. // nav_up = image.Image("/sd/preset/images/arrow_up_filled.jpg")
  775. // splash.draw_image(nav_up, 5, 5)
  776. var variable_name = Blockly.Python.variableDB_.getName(block.getFieldValue('varitem'), Blockly.Variables.NAME_TYPE);
  777. var value_image_path = Blockly.Python.valueToCode(block, 'image_path', Blockly.Python.ORDER_ATOMIC);
  778. var value_xy = Blockly.Python.valueToCode(block, 'xy', Blockly.Python.ORDER_ATOMIC);
  779. var value_scale_x = Blockly.Python.valueToCode(block, 'scale_x', Blockly.Python.ORDER_ATOMIC);
  780. var value_scale_y = Blockly.Python.valueToCode(block, 'scale_y', Blockly.Python.ORDER_ATOMIC); // TODO: Assemble Python into code variable.
  781. var code = '' + variable_name + '.draw_image(image.Image(' + value_image_path + '), ' + value_xy + ', x_scale=' + value_scale_x + ', y_scale=' + value_scale_y + ' )';
  782. '\n';
  783. return code;
  784. };
  785. Blockly.Blocks['ai_img_save'] = {
  786. init: function init() {
  787. this.appendValueInput("save_path").setCheck(null).appendField(Blockly.Msg.image_process_text_let_canvas).appendField(new Blockly.FieldVariable("canvas"), "varitem").appendField(Blockly.Msg.image_process_img_save);
  788. this.appendDummyInput().appendField(Blockly.Msg.image_process_img_save_quality).appendField(new Blockly.FieldNumber(90, 0, 100), "compression").appendField("%");
  789. this.setInputsInline(false);
  790. this.setPreviousStatement(true, null);
  791. this.setNextStatement(true, null);
  792. this.setColour("#f0983e");
  793. this.setTooltip("");
  794. this.setHelpUrl("");
  795. }
  796. };
  797. Blockly.Python['ai_img_save'] = function (block) {
  798. var variable_name = Blockly.Python.variableDB_.getName(block.getFieldValue('varitem'), Blockly.Variables.NAME_TYPE);
  799. var save_path_location = Blockly.Python.valueToCode(block, 'save_path', Blockly.Python.ORDER_ATOMIC);
  800. var compression_rate = block.getFieldValue('compression'); // TODO: Assemble Python into code variable.
  801. var code = variable_name + '.save(' + save_path_location + ', quality=' + compression_rate + ')\n';
  802. return code;
  803. };
  804. Blockly.Blocks['ai_lcd_invert_color'] = {
  805. init: function init() {
  806. this.appendDummyInput().appendField(Blockly.Msg.image_process_text_let_canvas).appendField(new Blockly.FieldVariable("canvas"), "varitem").appendField(Blockly.Msg.image_process_color_invert);
  807. this.setOutput(true, null);
  808. this.setColour("#f0983e");
  809. this.setTooltip("");
  810. this.setHelpUrl("");
  811. }
  812. };
  813. Blockly.Python['ai_lcd_invert_color'] = function (block) {
  814. var variable_name = Blockly.Python.variableDB_.getName(block.getFieldValue('varitem'), Blockly.Variables.NAME_TYPE); // TODO: Assemble Python into code variable.
  815. var code = variable_name + '.invert()'; // TODO: Change ORDER_NONE to the correct strength.
  816. return [code, Blockly.Python.ORDER_NONE];
  817. };
  818. Blockly.Blocks['ai_lcd_resizecanvas'] = {
  819. init: function init() {
  820. this.appendDummyInput().appendField(Blockly.Msg.image_process_text_let_canvas).appendField(new Blockly.FieldVariable("canvas"), "varitem").appendField(Blockly.Msg.image_process_resize_to);
  821. this.appendValueInput("wh").setCheck(null);
  822. this.setInputsInline(true);
  823. this.setOutput(true, null);
  824. this.setColour("#f0983e");
  825. this.setTooltip("");
  826. this.setHelpUrl("");
  827. }
  828. };
  829. Blockly.Python['ai_lcd_resizecanvas'] = function (block) {
  830. var variable_name = Blockly.Python.variableDB_.getName(block.getFieldValue('varitem'), Blockly.Variables.NAME_TYPE);
  831. var wh = Blockly.Python.valueToCode(block, 'wh', Blockly.Python.ORDER_ATOMIC); // TODO: Assemble Python into code variable.
  832. var code = variable_name + '.resize(' + wh + ')'; // TODO: Change ORDER_NONE to the correct strength.
  833. return [code, Blockly.Python.ORDER_NONE];
  834. };
  835. Blockly.Blocks['ai_lcd_color_scheme'] = {
  836. init: function init() {
  837. this.appendDummyInput().appendField(Blockly.Msg.image_process_text_let_canvas).appendField(new Blockly.FieldVariable("canvas"), "varitem").appendField(Blockly.Msg.image_process_color_scheme_convert).appendField(new Blockly.FieldDropdown([[Blockly.Msg.image_process_color_scheme_bw, "to_grayscale(1)"], [Blockly.Msg.image_process_color_scheme_rgb, "to_rgb565(1)"]]), "color_scheme");
  838. this.setOutput(true, null);
  839. this.setColour("#f0983e");
  840. this.setTooltip("");
  841. this.setHelpUrl("");
  842. }
  843. };
  844. Blockly.Python['ai_lcd_color_scheme'] = function (block) {
  845. var variable_name = Blockly.Python.variableDB_.getName(block.getFieldValue('varitem'), Blockly.Variables.NAME_TYPE);
  846. var dropdown_vari = block.getFieldValue('color_scheme'); // TODO: Assemble Python into code variable.
  847. var code = variable_name + '.' + dropdown_vari; // TODO: Change ORDER_NONE to the correct strength.
  848. return [code, Blockly.Python.ORDER_NONE];
  849. };
  850. Blockly.Blocks['ai_lcd_ai_pix'] = {
  851. init: function init() {
  852. this.appendDummyInput().appendField(Blockly.Msg.image_process_text_let_canvas).appendField(new Blockly.FieldVariable("canvas"), "varitem").appendField(Blockly.Msg.image_process_pixtovec_text_first).appendField(new Blockly.FieldDropdown([[Blockly.Msg.image_process_pixtovec_v2p, ".ai_to_pix()"], [Blockly.Msg.image_process_pixtovec_p2v, ".pix_to_ai()"]]), "ai_pix_type").appendField(Blockly.Msg.image_process_pixtovec_conversion);
  853. this.setInputsInline(false);
  854. this.setPreviousStatement(true, null);
  855. this.setNextStatement(true, null);
  856. this.setColour("#f0983e");
  857. this.setTooltip("");
  858. this.setHelpUrl("");
  859. }
  860. };
  861. Blockly.Python['ai_lcd_ai_pix'] = function (block) {
  862. var variable_name = Blockly.Python.variableDB_.getName(block.getFieldValue('varitem'), Blockly.Variables.NAME_TYPE);
  863. var dropdown_vari = block.getFieldValue('ai_pix_type'); // TODO: Assemble Python into code variable.
  864. var code = 'a = ' + variable_name + dropdown_vari + '\n'; // TODO: Change ORDER_NONE to the correct strength.
  865. return code;
  866. };
  867. Blockly.Blocks['ai_lcd_img_cut'] = {
  868. init: function init() {
  869. this.appendDummyInput().appendField(Blockly.Msg.image_process_text_let_canvas).appendField(new Blockly.FieldVariable("canvas"), "varitem").appendField(Blockly.Msg.image_process_imgcut_cutting);
  870. this.appendValueInput("xy").setCheck(null).appendField(Blockly.Msg.image_process_imgcut_start_coord);
  871. this.appendValueInput("wh").setCheck(null).appendField(Blockly.Msg.image_process_imgcut_size);
  872. this.setInputsInline(false);
  873. this.setOutput(true, null);
  874. this.setColour("#f0983e");
  875. this.setTooltip("");
  876. this.setHelpUrl("");
  877. }
  878. };
  879. Blockly.Python['ai_lcd_img_cut'] = function (block) {
  880. var variable_name = Blockly.Python.variableDB_.getName(block.getFieldValue('varitem'), Blockly.Variables.NAME_TYPE);
  881. var xy = Blockly.Python.valueToCode(block, 'xy', Blockly.Python.ORDER_ATOMIC);
  882. var wh = Blockly.Python.valueToCode(block, 'wh', Blockly.Python.ORDER_ATOMIC); // TODO: Assemble Python into code variable.
  883. // TODO: Change ORDER_NONE to the correct strength.
  884. var code = variable_name + '.cut(' + xy + ',' + wh + ')';
  885. return [code, Blockly.Python.ORDER_NONE];
  886. };
  887. Blockly.Blocks['ai_vision_get_statistics'] = {
  888. init: function init() {
  889. this.appendDummyInput().appendField(Blockly.Msg.image_process_get_statistics_to_canvas).appendField(new Blockly.FieldVariable("canvas"), "varitem").appendField(Blockly.Msg.image_process_get_statistics_get_analysis);
  890. this.appendValueInput("xy").setCheck(null).appendField(Blockly.Msg.image_process_get_statistics_start_coord);
  891. this.appendValueInput("wh").setCheck(null).appendField(Blockly.Msg.image_process_get_statistics_size);
  892. this.appendValueInput("bins").setCheck(null).appendField(Blockly.Msg.image_process_get_statistics_boxes);
  893. this.setInputsInline(false);
  894. this.setOutput(true, null);
  895. this.setColour("#f0983e");
  896. this.setTooltip("");
  897. this.setHelpUrl("");
  898. }
  899. };
  900. Blockly.Python['ai_vision_get_statistics'] = function (block) {
  901. var variable_name = Blockly.Python.variableDB_.getName(block.getFieldValue('varitem'), Blockly.Variables.NAME_TYPE);
  902. var xy = Blockly.Python.valueToCode(block, 'xy', Blockly.Python.ORDER_ATOMIC);
  903. var wh = Blockly.Python.valueToCode(block, 'wh', Blockly.Python.ORDER_ATOMIC);
  904. var bins = Blockly.Python.valueToCode(block, 'bins', Blockly.Python.ORDER_ATOMIC); // TODO: Assemble Python into code variable.
  905. var code = variable_name + '.get_statistics(bins=' + bins + ',roi=(' + xy + ',' + wh + '))'; // TODO: Change ORDER_NONE to the correct strength.
  906. return [code, Blockly.Python.ORDER_NONE];
  907. };
  908. Blockly.Blocks['ai_vision_get_histogram'] = {
  909. init: function init() {
  910. this.appendDummyInput().appendField(Blockly.Msg.ai_vision_get_histogram_get).appendField(new Blockly.FieldVariable("canvas"), "varitem").appendField(Blockly.Msg.ai_vision_get_histogram_compute);
  911. this.appendDummyInput().appendField(Blockly.Msg.ai_vision_get_histogram_region);
  912. this.appendValueInput("xy").setCheck(null).appendField(Blockly.Msg.ai_vision_get_histogram_region_xy);
  913. this.appendValueInput("wh").setCheck(null).appendField(Blockly.Msg.ai_vision_get_histogram_region_wh);
  914. this.setInputsInline(false);
  915. this.setOutput(true, null);
  916. this.setColour("#f0983e");
  917. this.setTooltip("");
  918. this.setHelpUrl("");
  919. }
  920. };
  921. Blockly.Python['ai_vision_get_histogram'] = function (block) {
  922. var variable_name = Blockly.Python.variableDB_.getName(block.getFieldValue('varitem'), Blockly.Variables.NAME_TYPE);
  923. var value_xy = Blockly.Python.valueToCode(block, 'xy', Blockly.Python.ORDER_ATOMIC);
  924. var value_wh = Blockly.Python.valueToCode(block, 'wh', Blockly.Python.ORDER_ATOMIC); // TODO: Assemble Python into code variable.
  925. var code = variable_name + '.get_histogram(roi=(' + value_xy + ',' + value_wh + '))'; // TODO: Change ORDER_NONE to the correct strength.
  926. return [code, Blockly.Python.ORDER_NONE];
  927. };
  928. Blockly.Blocks['ai_vision_get_histogram_percentile'] = {
  929. init: function init() {
  930. this.appendDummyInput().appendField(Blockly.Msg.ai_vision_get_histogram_details_1).appendField(new Blockly.FieldVariable("hist"), "varitem").appendField(Blockly.Msg.ai_vision_get_histogram_details_get);
  931. this.appendValueInput("perc").setCheck(null);
  932. this.setInputsInline(true);
  933. this.setOutput(true, null);
  934. this.setColour("#f0983e");
  935. this.setTooltip("");
  936. this.setHelpUrl("https://docs.openmv.io/library/omv.image.html#id3");
  937. }
  938. };
  939. Blockly.Python['ai_vision_get_histogram_percentile'] = function (block) {
  940. var variable_name = Blockly.Python.variableDB_.getName(block.getFieldValue('varitem'), Blockly.Variables.NAME_TYPE);
  941. var value_perc = Blockly.Python.valueToCode(block, 'perc', Blockly.Python.ORDER_ATOMIC); // TODO: Assemble Python into code variable.
  942. var code = variable_name + '.get_percentile(' + value_perc + ')'; // TODO: Change ORDER_NONE to the correct strength.
  943. return [code, Blockly.Python.ORDER_NONE];
  944. };
  945. Blockly.Blocks['ai_vision_get_histogram_percentile_detail'] = {
  946. init: function init() {
  947. this.appendDummyInput().appendField(Blockly.Msg.ai_vision_get_histogram_percentile_1).appendField(new Blockly.FieldVariable("percentile"), "varitem");
  948. this.appendDummyInput().appendField(Blockly.Msg.ai_vision_get_histogram_percentile_2).appendField(new Blockly.FieldDropdown([[Blockly.Msg.ai_vision_get_histogram_percentile_3, "value()"], [Blockly.Msg.ai_vision_get_histogram_percentile_4, "l_value()"], [Blockly.Msg.ai_vision_get_histogram_percentile_5, "a_value()"], [Blockly.Msg.ai_vision_get_histogram_percentile_6, "b_value()"]]), "option");
  949. this.setInputsInline(false);
  950. this.setOutput(true, null);
  951. this.setColour("#f0983e");
  952. this.setTooltip("");
  953. this.setHelpUrl("https://docs.openmv.io/library/omv.image.html#id3");
  954. }
  955. };
  956. Blockly.Python['ai_vision_get_histogram_percentile_detail'] = function (block) {
  957. var variable_name = Blockly.Python.variableDB_.getName(block.getFieldValue('varitem'), Blockly.Variables.NAME_TYPE);
  958. var dropdown_option = block.getFieldValue('option');
  959. var code = variable_name + '.' + dropdown_option; // TODO: Change ORDER_NONE to the correct strength.
  960. return [code, Blockly.Python.ORDER_NONE];
  961. };
  962. Blockly.Blocks['ai_vision_lab_rgb_conversion'] = {
  963. init: function init() {
  964. this.appendDummyInput().appendField(Blockly.Msg.image_process_lab_rgb_conversion_exec).appendField(new Blockly.FieldDropdown([[Blockly.Msg.image_process_lab_rgb_conversion_torgb, "lab_to_rgb"], [Blockly.Msg.image_process_lab_rgb_conversion_tolab, "rgb_to_lab"]]), "rgblab");
  965. this.appendValueInput("color_tuple").setCheck(null).appendField(Blockly.Msg.image_process_lab_rgb_conversion_tuple);
  966. this.setOutput(true, null);
  967. this.setColour("#f0983e");
  968. this.setTooltip("");
  969. this.setHelpUrl("");
  970. }
  971. };
  972. Blockly.Python['ai_vision_lab_rgb_conversion'] = function (block) {
  973. var type = block.getFieldValue('rgblab');
  974. var tuple = Blockly.Python.valueToCode(block, 'color_tuple', Blockly.Python.ORDER_ATOMIC); // TODO: Assemble Python into code variable.
  975. var code = 'image.' + type + '(' + tuple + ')'; // TODO: Change ORDER_NONE to the correct strength.
  976. return [code, Blockly.Python.ORDER_NONE];
  977. };
  978. Blockly.Blocks['ai_vision_rgb_grayscale_conversion'] = {
  979. init: function init() {
  980. this.appendDummyInput().appendField(Blockly.Msg.image_process_rgb_grayscale_conversion_exec).appendField(new Blockly.FieldDropdown([[Blockly.Msg.image_process_rgb_grayscale_conversion_torgb, "grayscale_to_rgb"], [Blockly.Msg.image_process_rgb_grayscale_conversion_togray, "rgb_to_grayscale"]]), "rgb_g");
  981. this.appendValueInput("color_tuple").setCheck(null).appendField(Blockly.Msg.image_process_rgb_grayscale_conversion_set);
  982. this.setOutput(true, null);
  983. this.setColour("#f0983e");
  984. this.setTooltip("");
  985. this.setHelpUrl("");
  986. }
  987. };
  988. Blockly.Python['ai_vision_rgb_grayscale_conversion'] = function (block) {
  989. var type = block.getFieldValue('rgb_g');
  990. var tuple = Blockly.Python.valueToCode(block, 'color_tuple', Blockly.Python.ORDER_ATOMIC);
  991. Blockly.Python.addVariable('rgb_tuple', "", true); // TODO: Assemble Python into code variable.
  992. var code = 'image.' + type + '(' + tuple + ')'; // TODO: Change ORDER_NONE to the correct strength.
  993. return [code, Blockly.Python.ORDER_NONE];
  994. };
  995. /*
  996. _ ___ ____
  997. / \ |_ _| / ___|__ _ _ __ ___ ___ _ __ __ _
  998. / _ \ | | | | / _` | '_ ` _ \ / _ \ '__/ _` |
  999. / ___ \ | | | |__| (_| | | | | | | __/ | | (_| |
  1000. /_/ \_\___| \____\__,_|_| |_| |_|\___|_| \__,_|
  1001. */
  1002. Blockly.Blocks.ai_camera_wh = {
  1003. init: function init() {
  1004. var _input = this.appendDummyInput();
  1005. this.setHelpUrl(Blockly.Msg.LOGIC_OPERATION_HELPURL);
  1006. this.setColour("#60c1bb");
  1007. this.setOutput(!0, "Boolean");
  1008. _input.appendField(Blockly.Msg.W);
  1009. this.appendValueInput("A").setCheck("Number");
  1010. _input = this.appendDummyInput();
  1011. _input.appendField(Blockly.Msg.H);
  1012. this.appendValueInput("B").setCheck("Number");
  1013. this.setInputsInline(!0);
  1014. }
  1015. };
  1016. Blockly.Python.ai_camera_wh = function (block) {
  1017. var _x = Blockly.Python.valueToCode(block, "A", Blockly.Python.ORDER_ATOMIC);
  1018. var _y = Blockly.Python.valueToCode(block, "B", Blockly.Python.ORDER_ATOMIC);
  1019. var code = "" + _x + ", " + _y + "";
  1020. return [code, Blockly.Python.ORDER_ATOMIC];
  1021. };
  1022. Blockly.Blocks['ai_camera_init'] = {
  1023. init: function init() {
  1024. this.appendDummyInput().appendField(new Blockly.FieldImage("blockly/media/camera_init_header.png", 45, 45, {
  1025. alt: "*",
  1026. flipRtl: "FALSE"
  1027. }));
  1028. this.appendDummyInput().appendField(Blockly.Msg.ai_camera_camera_init);
  1029. this.appendDummyInput().appendField(Blockly.Msg.ai_camera_camera_set_size).appendField(new Blockly.FieldDropdown([["QVGA (320*240)", "QVGA"], ["QQVGA (160*120)", "QQVGA"]]), "DEGREE");
  1030. this.appendDummyInput().appendField(Blockly.Msg.ai_camera_camera_color_mode).appendField(new Blockly.FieldDropdown([[Blockly.Msg.ai_camera_camera_color_mode_rgb, "RGB565"], [Blockly.Msg.ai_camera_camera_color_mode_bw, "GRAYSCALE"]]), "DEGREE1");
  1031. this.setPreviousStatement(true, null);
  1032. this.setNextStatement(true, null);
  1033. this.setColour("#60c1bb");
  1034. this.setTooltip('');
  1035. this.setHelpUrl('');
  1036. }
  1037. };
  1038. Blockly.Python.ai_camera_init = function (block) {
  1039. var degee = block.getFieldValue('DEGREE');
  1040. var degee1 = block.getFieldValue('DEGREE1');
  1041. var checkbox = block.getFieldValue('checkbox') == 'TRUE';
  1042. var w = block.getFieldValue('w');
  1043. var h = block.getFieldValue('h');
  1044. var degee2 = block.getFieldValue('DEGREE2') || 1;
  1045. var degee3 = block.getFieldValue('DEGREE3') || 1;
  1046. var degee4 = block.getFieldValue('DEGREE4') || 1;
  1047. var degee5 = block.getFieldValue('DEGREE5') || 1;
  1048. var input1 = block.getFieldValue('input1') || 1;
  1049. var input2 = block.getFieldValue('input2') || 1;
  1050. var input3 = block.getFieldValue('input3') || 1;
  1051. Blockly.Python.definitions_.import_sensor = "import sensor";
  1052. var _code = "sensor.reset()\n";
  1053. _code += "sensor.set_pixformat(sensor." + degee1 + ")\n";
  1054. _code += "sensor.set_framesize(sensor." + degee + ")\n";
  1055. _code += "sensor.set_vflip(0)\n";
  1056. _code += "sensor.set_hmirror(0)\n";
  1057. _code += "sensor.skip_frames(30)\n";
  1058. _code += "sensor.run(1)\n";
  1059. return _code;
  1060. };
  1061. Blockly.Blocks['ai_camera_windows'] = {
  1062. init: function init() {
  1063. this.appendDummyInput().appendField(Blockly.Msg.ai_camera_windowing_resize);
  1064. this.appendDummyInput().appendField(Blockly.Msg.ai_camera_windowing_w).appendField(new Blockly.FieldNumber(224), "window_w").appendField(Blockly.Msg.ai_camera_windowing_h).appendField(new Blockly.FieldNumber(224), "window_h").appendField(Blockly.Msg.ai_camera_windowing_unit);
  1065. this.setPreviousStatement(true, null);
  1066. this.setNextStatement(true, null);
  1067. this.setColour("#60c1bb");
  1068. this.setTooltip("");
  1069. this.setHelpUrl("");
  1070. }
  1071. };
  1072. Blockly.Python['ai_camera_windows'] = function (block) {
  1073. var w = block.getFieldValue('window_w');
  1074. var h = block.getFieldValue('window_h');
  1075. var code = 'sensor.set_windowing((' + w + ',' + h + '))\n';
  1076. return code;
  1077. };
  1078. Blockly.Blocks['ai_camera_snapshot'] = {
  1079. init: function init() {
  1080. this.appendDummyInput().appendField(Blockly.Msg.ai_camera_snapshot);
  1081. this.setOutput(true, null);
  1082. this.setColour("#60c1bb");
  1083. this.setTooltip('');
  1084. this.setHelpUrl('');
  1085. }
  1086. };
  1087. Blockly.Python.ai_camera_snapshot = function (block) {
  1088. Blockly.Python.definitions_.import_sensor = "import sensor";
  1089. var degee = block.getFieldValue('DEGREE');
  1090. var _code = "sensor.snapshot()";
  1091. return [_code, Blockly.Python.ORDER_ATOMIC];
  1092. };
  1093. Blockly.Blocks['ai_camera_lens_corr'] = {
  1094. init: function init() {
  1095. this.appendValueInput("lens_corr").setCheck(null).appendField(Blockly.Msg.ai_camera_set_lens_corr);
  1096. this.setInputsInline(true);
  1097. this.setOutput(true, null);
  1098. this.setColour("#60c1bb");
  1099. this.setTooltip("");
  1100. this.setHelpUrl("");
  1101. }
  1102. };
  1103. Blockly.Python['ai_camera_lens_corr'] = function (block) {
  1104. var value_lens_corr = Blockly.Python.valueToCode(block, 'lens_corr', Blockly.Python.ORDER_ATOMIC); // TODO: Assemble Python into code variable.
  1105. var code = value_lens_corr + '.lens_corr(strength = 1.8, zoom = 1.0)'; // TODO: Change ORDER_NONE to the correct strength.
  1106. return [code, Blockly.Python.ORDER_NONE];
  1107. };
  1108. Blockly.Blocks['ai_camera_image_property_change'] = {
  1109. init: function init() {
  1110. this.appendDummyInput().appendField(Blockly.Msg.ai_camera_bcs_set_text_2).appendField(new Blockly.FieldDropdown([[Blockly.Msg.ai_camera_bcs_vflip, "set_vflip"], [Blockly.Msg.ai_camera_bcs_hmirror, "set_hmirror"], [Blockly.Msg.ai_camera_bcs_wb, "set_auto_whitebal"], [Blockly.Msg.ai_camera_bcs_g, "set_auto_gain"], [Blockly.Msg.ai_camera_bcs_e, "set_auto_exposure"]]), "image_property").appendField(Blockly.Msg.ai_camera_bcs_as_2).appendField(new Blockly.FieldDropdown([[Blockly.Msg.ai_camera_enable + Blockly.Msg.ai_camera_bcs_status, "True"], [Blockly.Msg.ai_camera_disable + Blockly.Msg.ai_camera_bcs_status, "False"]]), "DEGREE");
  1111. this.setPreviousStatement(true, null);
  1112. this.setNextStatement(true, null);
  1113. this.setColour("#60c1bb");
  1114. this.setTooltip('');
  1115. this.setHelpUrl('');
  1116. }
  1117. };
  1118. Blockly.Python.ai_camera_image_property_change = function (block) {
  1119. var degee = block.getFieldValue('DEGREE');
  1120. var dropdown_image_property = block.getFieldValue('image_property');
  1121. var _code = "sensor." + dropdown_image_property + "(" + degee + ")\n";
  1122. return _code;
  1123. };
  1124. Blockly.Blocks['ai_camera_vflip'] = {
  1125. init: function init() {
  1126. this.appendDummyInput().appendField(Blockly.Msg.ai_camera_set_vflip).appendField(new Blockly.FieldDropdown([[Blockly.Msg.ai_camera_enable, "True"], [Blockly.Msg.ai_camera_disable, "False"]]), "DEGREE");
  1127. this.setPreviousStatement(true, null);
  1128. this.setNextStatement(true, null);
  1129. this.setColour("#60c1bb");
  1130. this.setTooltip('');
  1131. this.setHelpUrl('');
  1132. }
  1133. };
  1134. Blockly.Python.ai_camera_vflip = function (block) {
  1135. var degee = block.getFieldValue('DEGREE');
  1136. var _code = "sensor.set_vflip(" + degee + ")\n";
  1137. return _code;
  1138. };
  1139. Blockly.Blocks['ai_camera_hmirror'] = {
  1140. init: function init() {
  1141. this.appendDummyInput().appendField(Blockly.Msg.ai_camera_set_hmirror).appendField(new Blockly.FieldDropdown([[Blockly.Msg.ai_camera_enable, "True"], [Blockly.Msg.ai_camera_disable, "False"]]), "DEGREE");
  1142. this.setPreviousStatement(true, null);
  1143. this.setNextStatement(true, null);
  1144. this.setColour("#60c1bb");
  1145. this.setTooltip('');
  1146. this.setHelpUrl('');
  1147. }
  1148. };
  1149. Blockly.Python.ai_camera_hmirror = function (block) {
  1150. var degee = block.getFieldValue('DEGREE');
  1151. var _code = "sensor.set_hmirror(" + degee + ")\n";
  1152. return _code;
  1153. };
  1154. Blockly.Blocks['ai_camera_auto_whitebal'] = {
  1155. init: function init() {
  1156. this.appendDummyInput().appendField(Blockly.Msg.ai_camera_set_auto_whitebal).appendField(new Blockly.FieldDropdown([[Blockly.Msg.ai_camera_enable, "True"], [Blockly.Msg.ai_camera_disable, "False"]]), "DEGREE");
  1157. this.setPreviousStatement(true, null);
  1158. this.setNextStatement(true, null);
  1159. this.setColour("#60c1bb");
  1160. this.setTooltip('');
  1161. this.setHelpUrl('');
  1162. }
  1163. };
  1164. Blockly.Python.ai_camera_auto_whitebal = function (block) {
  1165. var degee = block.getFieldValue('DEGREE');
  1166. var _code = "sensor.set_auto_whitebal(" + degee + ")\n";
  1167. return _code;
  1168. };
  1169. Blockly.Blocks['ai_camera_auto_gain'] = {
  1170. init: function init() {
  1171. this.appendDummyInput().appendField(Blockly.Msg.ai_camera_set_auto_gain).appendField(new Blockly.FieldDropdown([[Blockly.Msg.ai_camera_enable, "True"], [Blockly.Msg.ai_camera_disable, "False"]]), "DEGREE");
  1172. this.setPreviousStatement(true, null);
  1173. this.setNextStatement(true, null);
  1174. this.setColour("#60c1bb");
  1175. this.setTooltip('');
  1176. this.setHelpUrl('');
  1177. }
  1178. };
  1179. Blockly.Python.ai_camera_auto_gain = function (block) {
  1180. var degee = block.getFieldValue('DEGREE');
  1181. var _code = "sensor.set_auto_gain(" + degee + ")\n";
  1182. return _code;
  1183. };
  1184. Blockly.Blocks['ai_camera_auto_exposure'] = {
  1185. init: function init() {
  1186. this.appendDummyInput().appendField(Blockly.Msg.ai_camera_set_auto_exposure).appendField(new Blockly.FieldDropdown([[Blockly.Msg.ai_camera_enable, "True"], [Blockly.Msg.ai_camera_disable, "False"]]), "DEGREE");
  1187. this.setPreviousStatement(true, null);
  1188. this.setNextStatement(true, null);
  1189. this.setColour("#60c1bb");
  1190. this.setTooltip('');
  1191. this.setHelpUrl('');
  1192. }
  1193. };
  1194. Blockly.Python.ai_camera_auto_exposure = function (block) {
  1195. var degee = block.getFieldValue('DEGREE');
  1196. var _code = "sensor.set_auto_exposure(" + degee + ")\n";
  1197. return _code;
  1198. };
  1199. Blockly.Blocks['ai_camera_bcs_operation'] = {
  1200. init: function init() {
  1201. this.appendDummyInput().appendField(Blockly.Msg.ai_camera_bcs_set_text).appendField(new Blockly.FieldDropdown([[Blockly.Msg.ai_camera_bcs_contrast, "contrast"], [Blockly.Msg.ai_camera_bcs_brightness, "brightness"], [Blockly.Msg.ai_camera_bcs_saturation, "saturation"]]), "image_property").appendField(Blockly.Msg.ai_camera_bcs_as);
  1202. this.appendValueInput("A").setCheck("Number");
  1203. this.appendDummyInput().appendField(Blockly.Msg.ai_camera_set_range);
  1204. this.setPreviousStatement(true, null);
  1205. this.setNextStatement(true, null);
  1206. this.setInputsInline(!0);
  1207. this.setColour("#60c1bb");
  1208. this.setTooltip('');
  1209. this.setHelpUrl('');
  1210. }
  1211. };
  1212. Blockly.Python.ai_camera_bcs_operation = function (block) {
  1213. var dropdown_image_property = block.getFieldValue('image_property');
  1214. var _x = Blockly.Python.valueToCode(block, "A", Blockly.Python.ORDER_ATOMIC);
  1215. var _code = "sensor.set_" + dropdown_image_property + "(" + _x + ")\n";
  1216. return _code;
  1217. };
  1218. Blockly.Blocks['ai_camera_contrast'] = {
  1219. init: function init() {
  1220. this.appendDummyInput().appendField(Blockly.Msg.ai_camera_set_contrast_to_value);
  1221. this.appendValueInput("A").setCheck("Number");
  1222. this.appendDummyInput().appendField(Blockly.Msg.ai_camera_set_range);
  1223. this.setPreviousStatement(true, null);
  1224. this.setNextStatement(true, null);
  1225. this.setInputsInline(!0);
  1226. this.setColour("#60c1bb");
  1227. this.setTooltip('');
  1228. this.setHelpUrl('');
  1229. }
  1230. };
  1231. Blockly.Python.ai_camera_contrast = function (block) {
  1232. var _x = Blockly.Python.valueToCode(block, "A", Blockly.Python.ORDER_ATOMIC);
  1233. var _code = "sensor.set_contrast(" + _x + ")\n";
  1234. return _code;
  1235. };
  1236. Blockly.Blocks['ai_camera_brightness'] = {
  1237. init: function init() {
  1238. this.appendDummyInput().appendField(Blockly.Msg.ai_camera_set_brightness_to_value);
  1239. this.appendValueInput("A").setCheck("Number");
  1240. this.appendDummyInput().appendField(Blockly.Msg.ai_camera_set_range);
  1241. this.setPreviousStatement(true, null);
  1242. this.setNextStatement(true, null);
  1243. this.setInputsInline(!0);
  1244. this.setColour("#60c1bb");
  1245. this.setTooltip('');
  1246. this.setHelpUrl('');
  1247. }
  1248. };
  1249. Blockly.Python.ai_camera_brightness = function (block) {
  1250. var _x = Blockly.Python.valueToCode(block, "A", Blockly.Python.ORDER_ATOMIC);
  1251. var _code = "sensor.set_brightness(" + _x + ")\n";
  1252. return _code;
  1253. };
  1254. Blockly.Blocks['ai_camera_saturation'] = {
  1255. init: function init() {
  1256. this.appendDummyInput().appendField(Blockly.Msg.ai_camera_set_saturation_value);
  1257. this.appendValueInput("A").setCheck("Number");
  1258. this.appendDummyInput().appendField(Blockly.Msg.ai_camera_set_range);
  1259. this.setPreviousStatement(true, null);
  1260. this.setNextStatement(true, null);
  1261. this.setInputsInline(!0);
  1262. this.setColour("#60c1bb");
  1263. this.setTooltip('');
  1264. this.setHelpUrl('');
  1265. }
  1266. };
  1267. Blockly.Python.ai_camera_saturation = function (block) {
  1268. var _x = Blockly.Python.valueToCode(block, "A", Blockly.Python.ORDER_ATOMIC);
  1269. var _code = "sensor.set_saturation(" + _x + ")\n";
  1270. return _code;
  1271. };
  1272. /*
  1273. _ ___ __ ___ _
  1274. / \ |_ _| \ \ / (_)___(_) ___ _ __
  1275. / _ \ | | \ \ / /| / __| |/ _ \| '_ \
  1276. / ___ \ | | \ V / | \__ \ | (_) | | | |
  1277. /_/ \_\___| \_/ |_|___/_|\___/|_| |_|
  1278. */
  1279. Blockly.Blocks.ai_lcd_XY_vision = {
  1280. init: function init() {
  1281. var _input = this.appendDummyInput();
  1282. this.setHelpUrl(Blockly.Msg.LOGIC_OPERATION_HELPURL);
  1283. this.setColour("#f0983e");
  1284. this.setOutput(!0, "Boolean");
  1285. _input.appendField(Blockly.Msg.X);
  1286. this.appendValueInput("A").setCheck("Number");
  1287. _input = this.appendDummyInput();
  1288. _input.appendField(Blockly.Msg.Y);
  1289. this.appendValueInput("B").setCheck("Number");
  1290. this.setInputsInline(!0);
  1291. }
  1292. };
  1293. Blockly.Python.ai_lcd_XY_vision = function (block) {
  1294. var _x = Blockly.Python.valueToCode(block, "A", Blockly.Python.ORDER_ATOMIC);
  1295. var _y = Blockly.Python.valueToCode(block, "B", Blockly.Python.ORDER_ATOMIC);
  1296. var code = "" + _x + ", " + _y + "";
  1297. return [code, Blockly.Python.ORDER_ATOMIC];
  1298. };
  1299. Blockly.Blocks.ai_lcd_WH_vision = {
  1300. init: function init() {
  1301. var _input = this.appendDummyInput();
  1302. this.setHelpUrl(Blockly.Msg.LOGIC_OPERATION_HELPURL);
  1303. this.setColour("#f0983e");
  1304. this.setOutput(!0, "Boolean");
  1305. _input.appendField(Blockly.Msg.W);
  1306. this.appendValueInput("A").setCheck("Number");
  1307. _input = this.appendDummyInput();
  1308. _input.appendField(Blockly.Msg.H);
  1309. this.appendValueInput("B").setCheck("Number");
  1310. this.setInputsInline(!0);
  1311. }
  1312. };
  1313. Blockly.Python.ai_lcd_WH_vision = function (block) {
  1314. var _x = Blockly.Python.valueToCode(block, "A", Blockly.Python.ORDER_ATOMIC);
  1315. var _y = Blockly.Python.valueToCode(block, "B", Blockly.Python.ORDER_ATOMIC);
  1316. var code = "" + _x + ", " + _y + "";
  1317. return [code, Blockly.Python.ORDER_ATOMIC];
  1318. };
  1319. Blockly.Blocks['ai_vision_color_analyze'] = {
  1320. init: function init() {
  1321. this.appendDummyInput().appendField(new Blockly.FieldImage("blockly/media/ai_vision_analyze_color.png", 50, 50, {
  1322. alt: "*",
  1323. flipRtl: "FALSE"
  1324. }));
  1325. this.appendDummyInput().appendField(Blockly.Msg.ai_vision_get_canvas).appendField(new Blockly.FieldVariable("canvas"), "varitem").appendField(Blockly.Msg.ai_vision_color_analyze_get_result);
  1326. this.appendValueInput("xy").setCheck(null).appendField(Blockly.Msg.ai_vision_color_analyze_start_coord);
  1327. this.appendValueInput("wh").setCheck(null).appendField(Blockly.Msg.ai_vision_color_analyze_size);
  1328. this.setOutput(true, null);
  1329. this.setColour("#f0983e");
  1330. this.setTooltip("");
  1331. this.setHelpUrl("");
  1332. }
  1333. };
  1334. Blockly.Python['ai_vision_color_analyze'] = function (block) {
  1335. var variable_name = Blockly.Python.variableDB_.getName(block.getFieldValue('varitem'), Blockly.Variables.NAME_TYPE);
  1336. var xy = Blockly.Python.valueToCode(block, 'xy', Blockly.Python.ORDER_ATOMIC);
  1337. var wh = Blockly.Python.valueToCode(block, 'wh', Blockly.Python.ORDER_ATOMIC);
  1338. Blockly.Python.addFunction("function", '' + 'def _get_regional_color_analyze_rgb(x, y, w, h):\n' + ' _crd_bounding_box_size = (w, h)\n' + ' _crd_r = [x, y, _crd_bounding_box_size[0], _crd_bounding_box_size[1]] # 50x50 center of QQVGA.\n' + ' _crd_hist = ' + variable_name + '.get_statistics(bins=8,roi=_crd_r)\n' + ' return image.lab_to_rgb((_crd_hist.l_mean(),_crd_hist.a_mean(),_crd_hist.b_mean()))\n' + ''); // TODO: Assemble Python into code variable.
  1339. var code = '_get_regional_color_analyze_rgb(' + xy + ', ' + wh + ')'; // TODO: Change ORDER_NONE to the correct strength.
  1340. return [code, Blockly.Python.ORDER_NONE];
  1341. };
  1342. Blockly.Blocks['ai_vision_find_blobs'] = {
  1343. init: function init() {
  1344. this.appendDummyInput().appendField(new Blockly.FieldImage("blockly/media/ai_vision_find_color.png", 50, 50, {
  1345. alt: "*",
  1346. flipRtl: "FALSE"
  1347. }));
  1348. this.appendDummyInput().appendField(Blockly.Msg.ai_vision_from_canvas).appendField(new Blockly.FieldVariable("canvas"), "varitem").appendField(Blockly.Msg.ai_vision_find_blobs_color_region);
  1349. this.appendValueInput("color_threshold").setCheck(null).appendField(Blockly.Msg.ai_vision_find_blobs_color_threshold);
  1350. this.appendValueInput("xy").setCheck(null).appendField(Blockly.Msg.ai_vision_find_blobs_start_coord);
  1351. this.appendValueInput("wh").setCheck(null).appendField(Blockly.Msg.ai_vision_find_blobs_size);
  1352. this.appendValueInput("area_threshold").setCheck(null).appendField(Blockly.Msg.ai_vision_find_blobs_region_threshold).appendField(new Blockly.FieldCheckbox("FALSE"), "check_area");
  1353. this.appendValueInput("pixels_threshold").setCheck(null).appendField(Blockly.Msg.ai_vision_find_blobs_pixel_threshold).appendField(new Blockly.FieldCheckbox("FALSE"), "check_pixels");
  1354. this.appendValueInput("margin").setCheck(null).appendField(Blockly.Msg.ai_vision_find_blobs_margin).appendField(new Blockly.FieldCheckbox("FALSE"), "margin");
  1355. this.appendDummyInput().appendField(Blockly.Msg.ai_vision_find_blobs_filtered_region).appendField(new Blockly.FieldCheckbox("FALSE"), "check_merge");
  1356. this.setInputsInline(false);
  1357. this.setOutput(true, null);
  1358. this.setColour("#f0983e");
  1359. this.setTooltip("");
  1360. this.setHelpUrl("https://docs.singtown.com/micropython/zh/latest/openmvcam/library/omv.image.html?highlight=find_circles");
  1361. }
  1362. };
  1363. Blockly.Python['ai_vision_find_blobs'] = function (block) {
  1364. var variable_name = Blockly.Python.variableDB_.getName(block.getFieldValue('varitem'), Blockly.Variables.NAME_TYPE);
  1365. var value_color_threshold = Blockly.Python.valueToCode(block, 'color_threshold', Blockly.Python.ORDER_ATOMIC);
  1366. var value_xy = Blockly.Python.valueToCode(block, 'xy', Blockly.Python.ORDER_ATOMIC);
  1367. var value_wh = Blockly.Python.valueToCode(block, 'wh', Blockly.Python.ORDER_ATOMIC);
  1368. var value_area_threshold = Blockly.Python.valueToCode(block, 'area_threshold', Blockly.Python.ORDER_ATOMIC);
  1369. var value_pixels_threshold = Blockly.Python.valueToCode(block, 'pixels_threshold', Blockly.Python.ORDER_ATOMIC);
  1370. var checkbox_check_area = block.getFieldValue('check_area') == 'TRUE';
  1371. var checkbox_check_pixels = block.getFieldValue('check_pixels') == 'TRUE';
  1372. var checkbox_check_merge = block.getFieldValue('check_merge') == 'TRUE';
  1373. var value_margin = Blockly.Python.valueToCode(block, 'margin', Blockly.Python.ORDER_ATOMIC);
  1374. var checkbox_margin = block.getFieldValue('margin') == 'TRUE';
  1375. var area = checkbox_check_area;
  1376. var pixels = checkbox_check_pixels;
  1377. var margin = checkbox_margin;
  1378. var merge = checkbox_check_merge.toString();
  1379. var merge_state = merge.charAt(0).toUpperCase() + merge.slice(1);
  1380. if (margin == false) {
  1381. if (area == false && pixels == false) {
  1382. var addtional_parameters = ' ';
  1383. } else if (area == true && pixels == false) {
  1384. var addtional_parameters = ', ' + 'area_threshold=' + value_area_threshold;
  1385. } else if (area == false && pixels == true) {
  1386. var addtional_parameters = ', ' + 'pixels_threshold=' + value_area_threshold;
  1387. } else if (area == true && pixels == true) {
  1388. var addtional_parameters = ', ' + 'pixels_threshold=' + value_area_threshold + ', area_threshold=' + value_area_threshold;
  1389. }
  1390. } else if (margin == true) {
  1391. if (area == false && pixels == false) {
  1392. var addtional_parameters = ', margin=' + value_margin;
  1393. } else if (area == true && pixels == false) {
  1394. var addtional_parameters = ', ' + 'area_threshold=' + value_area_threshold + ', margin=' + value_margin;
  1395. } else if (area == false && pixels == true) {
  1396. var addtional_parameters = ', ' + 'pixels_threshold=' + value_area_threshold + ', margin=' + value_margin;
  1397. } else if (area == true && pixels == true) {
  1398. var addtional_parameters = ', ' + 'pixels_threshold=' + value_area_threshold + ', area_threshold=' + value_area_threshold + ', margin=' + value_margin;
  1399. }
  1400. } // TODO: Assemble Python into code variable.
  1401. var code = variable_name + '.find_blobs(' + value_color_threshold + ', roi=(' + value_xy + ',' + value_wh + '), merge=' + merge_state + addtional_parameters + ')'; // TODO: Change ORDER_NONE to the correct strength.
  1402. return [code, Blockly.Python.ORDER_NONE];
  1403. };
  1404. Blockly.Blocks['ai_vision_get_blobs'] = {
  1405. init: function init() {
  1406. this.appendDummyInput().appendField(Blockly.Msg.ai_vision_from).appendField(new Blockly.FieldVariable("i"), "varitem").appendField(Blockly.Msg.ai_vision_get_blobs_result).appendField(new Blockly.FieldDropdown([[Blockly.Msg.ai_vision_detection_box_x, "x()"], [Blockly.Msg.ai_vision_detection_box_y, "y()"], [Blockly.Msg.ai_vision_detection_box_width, "w()"], [Blockly.Msg.ai_vision_detection_box_height, "h()"], [Blockly.Msg.ai_vision_detection_box_pixels, "pixels()"], [Blockly.Msg.ai_vision_detection_box_cx, "cx()"], [Blockly.Msg.ai_vision_detection_box_cy, "cy()"], [Blockly.Msg.ai_vision_detection_box_degree, "rotation()"], [Blockly.Msg.ai_vision_detection_box_total, "count()"]]), "blob_type");
  1407. this.setInputsInline(false);
  1408. this.setOutput(true, null);
  1409. this.setColour("#f0983e");
  1410. this.setTooltip("");
  1411. this.setHelpUrl("https://docs.singtown.com/micropython/zh/latest/openmvcam/library/omv.image.html?highlight=find_circles");
  1412. }
  1413. };
  1414. Blockly.Python['ai_vision_get_blobs'] = function (block) {
  1415. var variable_name = Blockly.Python.variableDB_.getName(block.getFieldValue('varitem'), Blockly.Variables.NAME_TYPE);
  1416. var type = block.getFieldValue('blob_type'); // TODO: Assemble Python into code variable.
  1417. var code = variable_name + '.' + type; // TODO: Change ORDER_NONE to the correct strength.
  1418. return [code, Blockly.Python.ORDER_NONE];
  1419. };
  1420. Blockly.Blocks['ai_vision_find_qrcode'] = {
  1421. init: function init() {
  1422. this.appendDummyInput().appendField(new Blockly.FieldImage("blockly/media/ai_vision_qrcode_.png", 45, 45, {
  1423. alt: "*",
  1424. flipRtl: "FALSE"
  1425. }));
  1426. this.appendDummyInput().appendField(Blockly.Msg.ai_vision_get_canvas).appendField(new Blockly.FieldVariable("canvas"), "varitem").appendField(Blockly.Msg.ai_vision_qrcode_detected_result);
  1427. this.setOutput(true, null);
  1428. this.setColour("#f0983e");
  1429. this.setTooltip("");
  1430. this.setHelpUrl("");
  1431. }
  1432. };
  1433. Blockly.Python['ai_vision_find_qrcode'] = function (block) {
  1434. var variable_name = Blockly.Python.variableDB_.getName(block.getFieldValue('varitem'), Blockly.Variables.NAME_TYPE); // TODO: Assemble Python into code variable.
  1435. var code = variable_name + '.find_qrcodes()'; // TODO: Change ORDER_NONE to the correct strength.
  1436. return [code, Blockly.Python.ORDER_NONE];
  1437. };
  1438. Blockly.Blocks['ai_vision_qrcode_get_info'] = {
  1439. init: function init() {
  1440. this.appendDummyInput().appendField(Blockly.Msg.ai_vision_from).appendField(new Blockly.FieldVariable("i"), "varitem").appendField(Blockly.Msg.ai_vision_qrcode_get_result).appendField(new Blockly.FieldDropdown([[Blockly.Msg.ai_vision_pattern_detection_content, "payload"], [Blockly.Msg.ai_vision_pattern_detection_type, "data_type"], [Blockly.Msg.ai_vision_pattern_detection_x, "x"], [Blockly.Msg.ai_vision_pattern_detection_y, "y"], [Blockly.Msg.ai_vision_pattern_detection_w, "w"], [Blockly.Msg.ai_vision_pattern_detection_h, "h"]]), "get_info");
  1441. this.setInputsInline(false);
  1442. this.setOutput(true, null);
  1443. this.setColour("#f0983e");
  1444. this.setTooltip("");
  1445. this.setHelpUrl("");
  1446. }
  1447. };
  1448. Blockly.Python['ai_vision_qrcode_get_info'] = function (block) {
  1449. var variable_name = Blockly.Python.variableDB_.getName(block.getFieldValue('varitem'), Blockly.Variables.NAME_TYPE);
  1450. var dropdown_name = block.getFieldValue('get_info'); // TODO: Assemble Python into code variable.
  1451. var code = variable_name + '.' + dropdown_name + '()'; // TODO: Change ORDER_NONE to the correct strength.
  1452. return [code, Blockly.Python.ORDER_NONE];
  1453. };
  1454. Blockly.Blocks['ai_vision_find_apriltag'] = {
  1455. init: function init() {
  1456. this.appendDummyInput().appendField(new Blockly.FieldImage("blockly/media/ai_vision_apriltag_.png", 45, 45, {
  1457. alt: "*",
  1458. flipRtl: "FALSE"
  1459. }));
  1460. this.appendDummyInput().appendField(Blockly.Msg.ai_vision_get_canvas).appendField(new Blockly.FieldVariable("canvas"), "varitem").appendField(Blockly.Msg.ai_vision_apriltag_detected_result);
  1461. this.setOutput(true, null);
  1462. this.setColour("#f0983e");
  1463. this.setTooltip("");
  1464. this.setHelpUrl("");
  1465. }
  1466. };
  1467. Blockly.Python['ai_vision_find_apriltag'] = function (block) {
  1468. var variable_name = Blockly.Python.variableDB_.getName(block.getFieldValue('varitem'), Blockly.Variables.NAME_TYPE); // TODO: Assemble Python into code variable.
  1469. var code = variable_name + '.find_apriltags()'; // TODO: Change ORDER_NONE to the correct strength.
  1470. return [code, Blockly.Python.ORDER_NONE];
  1471. };
  1472. Blockly.Blocks['ai_vision_apriltag_get_info'] = {
  1473. init: function init() {
  1474. this.appendDummyInput().appendField(Blockly.Msg.ai_vision_from).appendField(new Blockly.FieldVariable("i"), "varitem").appendField(Blockly.Msg.ai_vision_apriltag_get_result).appendField(new Blockly.FieldDropdown([[Blockly.Msg.ai_vision_pattern_detection_content, "payload"], [Blockly.Msg.ai_vision_pattern_detection_type_id, "id"], [Blockly.Msg.ai_vision_pattern_detection_type_family, "family"], [Blockly.Msg.ai_vision_pattern_detection_x, "x"], [Blockly.Msg.ai_vision_pattern_detection_y, "y"], [Blockly.Msg.ai_vision_pattern_detection_w, "w"], [Blockly.Msg.ai_vision_pattern_detection_h, "h"]]), "get_info");
  1475. this.setInputsInline(false);
  1476. this.setOutput(true, null);
  1477. this.setColour("#f0983e");
  1478. this.setTooltip("");
  1479. this.setHelpUrl("");
  1480. }
  1481. };
  1482. Blockly.Python['ai_vision_apriltag_get_info'] = function (block) {
  1483. var variable_name = Blockly.Python.variableDB_.getName(block.getFieldValue('varitem'), Blockly.Variables.NAME_TYPE);
  1484. var dropdown_name = block.getFieldValue('get_info'); // TODO: Assemble Python into code variable.
  1485. var code = variable_name + '.' + dropdown_name + '()'; // TODO: Change ORDER_NONE to the correct strength.
  1486. return [code, Blockly.Python.ORDER_NONE];
  1487. };
  1488. Blockly.Blocks['ai_vision_find_datamatrices'] = {
  1489. init: function init() {
  1490. this.appendDummyInput().appendField(new Blockly.FieldImage("blockly/media/ai_vision_datamatrix_.png", 45, 45, {
  1491. alt: "*",
  1492. flipRtl: "FALSE"
  1493. }));
  1494. this.appendDummyInput().appendField(Blockly.Msg.ai_vision_get_canvas).appendField(new Blockly.FieldVariable("canvas"), "varitem").appendField(Blockly.Msg.ai_vision_datamatrices_detected_result);
  1495. this.setOutput(true, null);
  1496. this.setColour("#f0983e");
  1497. this.setTooltip("");
  1498. this.setHelpUrl("");
  1499. }
  1500. };
  1501. Blockly.Python['ai_vision_find_datamatrices'] = function (block) {
  1502. var variable_name = Blockly.Python.variableDB_.getName(block.getFieldValue('varitem'), Blockly.Variables.NAME_TYPE); // TODO: Assemble Python into code variable.
  1503. var code = variable_name + '.find_datamatrices()'; // TODO: Change ORDER_NONE to the correct strength.
  1504. return [code, Blockly.Python.ORDER_NONE];
  1505. };
  1506. Blockly.Blocks['ai_vision_datamatrices_get_info'] = {
  1507. init: function init() {
  1508. this.appendDummyInput().appendField(Blockly.Msg.ai_vision_from).appendField(new Blockly.FieldVariable("i"), "varitem").appendField(Blockly.Msg.ai_vision_data_matrices_get_result).appendField(new Blockly.FieldDropdown([[Blockly.Msg.ai_vision_pattern_detection_content, "payload"], [Blockly.Msg.ai_vision_pattern_detection_rows, "rows"], [Blockly.Msg.ai_vision_pattern_detection_cols, "columns"], [Blockly.Msg.ai_vision_pattern_detection_can_tolerate_count, "capacity"], [Blockly.Msg.ai_vision_pattern_detection_can_not_tolerate_count, "padding"], [Blockly.Msg.ai_vision_pattern_detection_x, "x"], [Blockly.Msg.ai_vision_pattern_detection_y, "y"], [Blockly.Msg.ai_vision_pattern_detection_w, "w"], [Blockly.Msg.ai_vision_pattern_detection_h, "h"]]), "get_info");
  1509. this.setInputsInline(false);
  1510. this.setOutput(true, null);
  1511. this.setColour("#f0983e");
  1512. this.setTooltip("");
  1513. this.setHelpUrl("");
  1514. }
  1515. };
  1516. Blockly.Python['ai_vision_datamatrices_get_info'] = function (block) {
  1517. var variable_name = Blockly.Python.variableDB_.getName(block.getFieldValue('varitem'), Blockly.Variables.NAME_TYPE);
  1518. var dropdown_name = block.getFieldValue('get_info'); // TODO: Assemble Python into code variable.
  1519. var code = variable_name + '.' + dropdown_name + '()'; // TODO: Change ORDER_NONE to the correct strength.
  1520. return [code, Blockly.Python.ORDER_NONE];
  1521. };
  1522. Blockly.Blocks['ai_vision_find_barcodes'] = {
  1523. init: function init() {
  1524. this.appendDummyInput().appendField(new Blockly.FieldImage("blockly/media/ai_vision_barcode_.png", 45, 45, {
  1525. alt: "*",
  1526. flipRtl: "FALSE"
  1527. }));
  1528. this.appendDummyInput().appendField(Blockly.Msg.ai_vision_get_canvas).appendField(new Blockly.FieldVariable("canvas"), "varitem").appendField(Blockly.Msg.ai_vision_barcode_detected_result);
  1529. this.setOutput(true, null);
  1530. this.setColour("#f0983e");
  1531. this.setTooltip("");
  1532. this.setHelpUrl("");
  1533. }
  1534. };
  1535. Blockly.Python['ai_vision_find_barcodes'] = function (block) {
  1536. var variable_name = Blockly.Python.variableDB_.getName(block.getFieldValue('varitem'), Blockly.Variables.NAME_TYPE); // TODO: Assemble Python into code variable.
  1537. var code = variable_name + '.find_barcodes()'; // TODO: Change ORDER_NONE to the correct strength.
  1538. return [code, Blockly.Python.ORDER_NONE];
  1539. };
  1540. Blockly.Blocks['ai_vision_barcodes_get_info'] = {
  1541. init: function init() {
  1542. this.appendDummyInput().appendField("從").appendField(new Blockly.FieldVariable("i"), "varitem").appendField(Blockly.Msg.ai_vision_barcode_matrices_get_result).appendField(new Blockly.FieldDropdown([[Blockly.Msg.ai_vision_pattern_detection_content, "payload"], [Blockly.Msg.ai_vision_pattern_detection_type, "type"], [Blockly.Msg.ai_vision_pattern_detection_x, "x"], [Blockly.Msg.ai_vision_pattern_detection_y, "y"], [Blockly.Msg.ai_vision_pattern_detection_w, "w"], [Blockly.Msg.ai_vision_pattern_detection_h, "h"]]), "get_info");
  1543. this.setInputsInline(false);
  1544. this.setOutput(true, null);
  1545. this.setColour("#f0983e");
  1546. this.setTooltip("");
  1547. this.setHelpUrl("");
  1548. }
  1549. };
  1550. Blockly.Python['ai_vision_barcodes_get_info'] = function (block) {
  1551. var variable_name = Blockly.Python.variableDB_.getName(block.getFieldValue('varitem'), Blockly.Variables.NAME_TYPE);
  1552. var dropdown_name = block.getFieldValue('get_info'); // TODO: Assemble Python into code variable.
  1553. var code = variable_name + '.' + dropdown_name + '()'; // TODO: Change ORDER_NONE to the correct strength.
  1554. return [code, Blockly.Python.ORDER_NONE];
  1555. };
  1556. Blockly.Blocks['ai_vision_find_circles'] = {
  1557. init: function init() {
  1558. this.appendDummyInput().appendField(new Blockly.FieldImage("blockly/media/ai_vision_find_circle.png", 50, 50, {
  1559. alt: "*",
  1560. flipRtl: "FALSE"
  1561. }));
  1562. this.appendDummyInput().appendField(Blockly.Msg.ai_vision_from_canvas).appendField(new Blockly.FieldVariable("canvas"), "varitem").appendField(Blockly.Msg.ai_vision_find_circle);
  1563. this.appendValueInput("xy").setCheck(null).appendField(Blockly.Msg.ai_vision_find_circle_start_coord);
  1564. this.appendValueInput("wh").setCheck(null).appendField(Blockly.Msg.ai_vision_find_circle_region_size);
  1565. this.appendValueInput("threshold").setCheck(null).appendField(Blockly.Msg.ai_vision_find_circle_hoffman_threshold);
  1566. this.appendValueInput("x_margin").setCheck(null).appendField(Blockly.Msg.ai_vision_find_circle_merge_x);
  1567. this.appendValueInput("y_margin").setCheck(null).appendField(Blockly.Msg.ai_vision_find_circle_merge_y);
  1568. this.appendValueInput("r_margin").setCheck(null).appendField(Blockly.Msg.ai_vision_find_circle_merge_r);
  1569. this.appendValueInput("r_min").setCheck(null).appendField(Blockly.Msg.ai_vision_find_circle_min_radius);
  1570. this.appendValueInput("r_max").setCheck(null).appendField(Blockly.Msg.ai_vision_find_circle_max_radius);
  1571. this.appendValueInput("r_step").setCheck(null).appendField(Blockly.Msg.ai_vision_find_circle_step_radius);
  1572. this.setOutput(true, null);
  1573. this.setColour("#f0983e");
  1574. this.setTooltip("");
  1575. this.setHelpUrl("https://docs.singtown.com/micropython/zh/latest/openmvcam/library/omv.image.html?highlight=find_circles");
  1576. }
  1577. };
  1578. Blockly.Python['ai_vision_find_circles'] = function (block) {
  1579. var variable_name = Blockly.Python.variableDB_.getName(block.getFieldValue('varitem'), Blockly.Variables.NAME_TYPE);
  1580. var xy = Blockly.Python.valueToCode(block, 'xy', Blockly.Python.ORDER_ATOMIC);
  1581. var wh = Blockly.Python.valueToCode(block, 'wh', Blockly.Python.ORDER_ATOMIC);
  1582. var threshold = Blockly.Python.valueToCode(block, 'threshold', Blockly.Python.ORDER_ATOMIC);
  1583. var x_margin = Blockly.Python.valueToCode(block, 'x_margin', Blockly.Python.ORDER_ATOMIC);
  1584. var y_margin = Blockly.Python.valueToCode(block, 'y_margin', Blockly.Python.ORDER_ATOMIC);
  1585. var r_margin = Blockly.Python.valueToCode(block, 'r_margin', Blockly.Python.ORDER_ATOMIC);
  1586. var r_min = Blockly.Python.valueToCode(block, 'r_min', Blockly.Python.ORDER_ATOMIC);
  1587. var r_max = Blockly.Python.valueToCode(block, 'r_max', Blockly.Python.ORDER_ATOMIC);
  1588. var r_step = Blockly.Python.valueToCode(block, 'r_step', Blockly.Python.ORDER_ATOMIC); // TODO: Assemble Python into code variable.
  1589. var code = variable_name + '.find_circles(roi=(' + xy + ',' + wh + '), threshold = ' + threshold + ', x_margin = ' + x_margin + ', y_margin = ' + y_margin + ', r_margin = ' + r_margin + ', r_min = ' + r_min + ', r_max = ' + r_max + ', r_step = ' + r_step + ')'; // TODO: Change ORDER_NONE to the correct strength.
  1590. return [code, Blockly.Python.ORDER_NONE];
  1591. };
  1592. Blockly.Blocks['ai_vision_get_circles'] = {
  1593. init: function init() {
  1594. this.appendDummyInput().appendField(Blockly.Msg.ai_vision_from).appendField(new Blockly.FieldVariable("i"), "varitem").appendField(Blockly.Msg.ai_vision_find_circle_detected_result).appendField(new Blockly.FieldDropdown([[Blockly.Msg.ai_vision_find_circle_detected_x, "x()"], [Blockly.Msg.ai_vision_find_circle_detected_y, "y()"], [Blockly.Msg.ai_vision_find_circle_detected_radius, "r()"]]), "blob_type");
  1595. this.setInputsInline(false);
  1596. this.setOutput(true, null);
  1597. this.setColour("#f0983e");
  1598. this.setTooltip("");
  1599. this.setHelpUrl("https://docs.singtown.com/micropython/zh/latest/openmvcam/library/omv.image.html?highlight=find_circles");
  1600. }
  1601. };
  1602. Blockly.Python['ai_vision_get_circles'] = function (block) {
  1603. var variable_name = Blockly.Python.variableDB_.getName(block.getFieldValue('varitem'), Blockly.Variables.NAME_TYPE);
  1604. var type = block.getFieldValue('blob_type');
  1605. var code = variable_name + '.' + type;
  1606. return [code, Blockly.Python.ORDER_NONE];
  1607. };
  1608. Blockly.Blocks['ai_vision_find_lines'] = {
  1609. init: function init() {
  1610. this.appendDummyInput().appendField(new Blockly.FieldImage("blockly/media/ai_vision_find_line.png", 50, 50, {
  1611. alt: "*",
  1612. flipRtl: "FALSE"
  1613. }));
  1614. this.appendDummyInput().appendField(Blockly.Msg.ai_vision_from_canvas).appendField(new Blockly.FieldVariable("canvas"), "varitem").appendField(Blockly.Msg.ai_vision_find_line);
  1615. this.appendValueInput("xy").setCheck(null).appendField(Blockly.Msg.ai_vision_find_line_start_coord);
  1616. this.appendValueInput("wh").setCheck(null).appendField(Blockly.Msg.ai_vision_find_line_size);
  1617. this.appendValueInput("threshold").setCheck(null).appendField(Blockly.Msg.ai_vision_find_line_hoffman_threshold);
  1618. this.appendValueInput("theta_margin").setCheck(null).appendField(Blockly.Msg.ai_vision_find_line_merge_theta);
  1619. this.appendValueInput("rho_margin").setCheck(null).appendField(Blockly.Msg.ai_vision_find_line_merge_rho);
  1620. this.setOutput(true, null);
  1621. this.setColour("#f0983e");
  1622. this.setTooltip("");
  1623. this.setHelpUrl("https://docs.singtown.com/micropython/zh/latest/openmvcam/library/omv.image.html?highlight=find_circles");
  1624. }
  1625. };
  1626. Blockly.Python['ai_vision_find_lines'] = function (block) {
  1627. var variable_name = Blockly.Python.variableDB_.getName(block.getFieldValue('varitem'), Blockly.Variables.NAME_TYPE);
  1628. var threshold = Blockly.Python.valueToCode(block, 'threshold', Blockly.Python.ORDER_ATOMIC);
  1629. var theta_margin = Blockly.Python.valueToCode(block, 'theta_margin', Blockly.Python.ORDER_ATOMIC);
  1630. var rho_margin = Blockly.Python.valueToCode(block, 'rho_margin', Blockly.Python.ORDER_ATOMIC); // TODO: Assemble Python into code variable.
  1631. var code = variable_name + '.find_lines(roi=(' + xy + ',' + wh + '), threshold = ' + threshold + ', theta_margin = ' + theta_margin + ', rho_margin = ' + rho_margin + ')'; // TODO: Change ORDER_NONE to the correct strength.
  1632. return [code, Blockly.Python.ORDER_NONE];
  1633. };
  1634. Blockly.Blocks['ai_vision_get_lines'] = {
  1635. init: function init() {
  1636. this.appendDummyInput().appendField(Blockly.Msg.ai_vision_from).appendField(new Blockly.FieldVariable("i"), "varitem").appendField(Blockly.Msg.ai_vision_find_line_detected_result).appendField(new Blockly.FieldDropdown([[Blockly.Msg.ai_vision_find_line_detected_start_x, "x1()"], [Blockly.Msg.ai_vision_find_line_detected_start_y, "y1()"], [Blockly.Msg.ai_vision_find_line_detected_end_x, "x2()"], [Blockly.Msg.ai_vision_find_line_detected_end_y, "y2()"], [Blockly.Msg.ai_vision_find_line_detected_length, "length()"], [Blockly.Msg.ai_vision_find_line_detected_angle, "theta()"]]), "blob_type");
  1637. this.setInputsInline(false);
  1638. this.setOutput(true, null);
  1639. this.setColour("#f0983e");
  1640. this.setTooltip("");
  1641. this.setHelpUrl("https://docs.singtown.com/micropython/zh/latest/openmvcam/library/omv.image.html?highlight=find_circles");
  1642. }
  1643. };
  1644. Blockly.Python['ai_vision_get_lines'] = function (block) {
  1645. var variable_name = Blockly.Python.variableDB_.getName(block.getFieldValue('varitem'), Blockly.Variables.NAME_TYPE);
  1646. var type = block.getFieldValue('blob_type'); // TODO: Assemble Python into code variable.
  1647. var code = variable_name + '.' + type; // TODO: Change ORDER_NONE to the correct strength.
  1648. return [code, Blockly.Python.ORDER_NONE];
  1649. };
  1650. Blockly.Blocks['ai_vision_find_rects'] = {
  1651. init: function init() {
  1652. this.appendDummyInput().appendField(new Blockly.FieldImage("blockly/media/ai_vision_find_rect.png", 50, 50, {
  1653. alt: "*",
  1654. flipRtl: "FALSE"
  1655. }));
  1656. this.appendDummyInput().appendField(Blockly.Msg.ai_vision_from_canvas).appendField(new Blockly.FieldVariable("canvas"), "varitem").appendField(Blockly.Msg.ai_vision_find_rect);
  1657. this.appendValueInput("xy").setCheck(null).appendField(Blockly.Msg.ai_vision_find_rect_start_coord);
  1658. this.appendValueInput("wh").setCheck(null).appendField(Blockly.Msg.ai_vision_find_rect_region_size);
  1659. this.appendValueInput("threshold").setCheck(null).appendField(Blockly.Msg.ai_vision_find_rect_bounding_threshold);
  1660. this.setOutput(true, null);
  1661. this.setColour("#f0983e");
  1662. this.setTooltip("");
  1663. this.setHelpUrl("https://docs.singtown.com/micropython/zh/latest/openmvcam/library/omv.image.html?highlight=find_circles");
  1664. }
  1665. };
  1666. Blockly.Python['ai_vision_find_rects'] = function (block) {
  1667. var variable_name = Blockly.Python.variableDB_.getName(block.getFieldValue('varitem'), Blockly.Variables.NAME_TYPE);
  1668. var threshold = Blockly.Python.valueToCode(block, 'threshold', Blockly.Python.ORDER_ATOMIC); // TODO: Assemble Python into code variable.
  1669. var code = variable_name + '.find_rects(roi=(' + xy + ',' + wh + '), threshold = ' + threshold + ')'; // TODO: Change ORDER_NONE to the correct strength.
  1670. return [code, Blockly.Python.ORDER_NONE];
  1671. };
  1672. Blockly.Blocks['ai_vision_get_rects'] = {
  1673. init: function init() {
  1674. this.appendDummyInput().appendField(Blockly.Msg.ai_vision_from).appendField(new Blockly.FieldVariable("i"), "varitem").appendField(Blockly.Msg.ai_vision_find_rect_detected_result).appendField(new Blockly.FieldDropdown([[Blockly.Msg.ai_vision_find_rect_detected_tuple, "length()"], [Blockly.Msg.ai_vision_find_rect_detected_x, "x()"], [Blockly.Msg.ai_vision_find_rect_detected_y, "y()"], [Blockly.Msg.ai_vision_find_rect_detected_w, "w()"], [Blockly.Msg.ai_vision_find_rect_detected_h, "h()"]]), "blob_type");
  1675. this.setInputsInline(false);
  1676. this.setOutput(true, null);
  1677. this.setColour("#f0983e");
  1678. this.setTooltip("");
  1679. this.setHelpUrl("https://docs.singtown.com/micropython/zh/latest/openmvcam/library/omv.image.html?highlight=find_circles");
  1680. }
  1681. };
  1682. Blockly.Python['ai_vision_get_rects'] = function (block) {
  1683. var variable_name = Blockly.Python.variableDB_.getName(block.getFieldValue('varitem'), Blockly.Variables.NAME_TYPE);
  1684. var type = block.getFieldValue('blob_type'); // TODO: Assemble Python into code variable.
  1685. var code = variable_name + '.' + type; // TODO: Change ORDER_NONE to the correct strength.
  1686. return [code, Blockly.Python.ORDER_NONE];
  1687. };
  1688. /*
  1689. _ ___ __ __ _ _
  1690. / \ |_ _| | \/ (_) ___ _ __ ___ _ __ | |__ ___ _ __ ___
  1691. / _ \ | | | |\/| | |/ __| '__/ _ \| '_ \| '_ \ / _ \| '_ \ / _ \
  1692. / ___ \ | | | | | | | (__| | | (_) | |_) | | | | (_) | | | | __/
  1693. /_/ \_\___| |_| |_|_|\___|_| \___/| .__/|_| |_|\___/|_| |_|\___|
  1694. |_|
  1695. */
  1696. Blockly.Blocks['ai_mphone_init'] = {
  1697. init: function init() {
  1698. this.appendDummyInput().appendField(new Blockly.FieldImage("blockly/media/microphone_init_header.png", 45, 45, {
  1699. alt: "*",
  1700. flipRtl: "FALSE"
  1701. }));
  1702. this.appendDummyInput().appendField(Blockly.Msg.ai_microphone_init);
  1703. this.setPreviousStatement(true);
  1704. this.setNextStatement(true);
  1705. this.setColour("#5fcd8e");
  1706. this.setTooltip("");
  1707. this.setHelpUrl("");
  1708. }
  1709. };
  1710. Blockly.Python.ai_mphone_init = function (block) {
  1711. Blockly.Python.definitions_.import_all_mphone = "" + "from Maix import GPIO, I2S, FFT\n" + "from board import board_info\n" + "from fpioa_manager import fm\n" + "\n" + "sample_rate = 38640\n" + "sample_points = 1024\n" + "fft_points = 512\n" + "hist_x_num = 50\n" + "\n" + "fm.register(20,fm.fpioa.I2S0_IN_D0, force=True)\n" + "fm.register(19,fm.fpioa.I2S0_WS, force=True)\n" + "fm.register(18,fm.fpioa.I2S0_SCLK, force=True)\n" + "\n" + "_recorder_rx = I2S(I2S.DEVICE_0)\n" + "_recorder_rx.channel_config(_recorder_rx.CHANNEL_0, _recorder_rx.RECEIVER, align_mode = I2S.STANDARD_MODE)\n" + "_recorder_rx.set_sample_rate(sample_rate)\n" + "def _microphone_read_average(lst): \n" + " return int((sum(lst)/len(lst))*100)\n" + "";
  1712. Blockly.Python.addVariable('sample_rate', "sample_rate = 38640", true);
  1713. Blockly.Python.addVariable('sample_points', "sample_points = 1024", true);
  1714. Blockly.Python.addVariable('fft_points', "fft_points = 512", true);
  1715. Blockly.Python.addVariable('hist_x_num', "hist_x_num = 50", true);
  1716. Blockly.Python.addVariable('_recorder_rx', "", true);
  1717. Blockly.Python.addVariable('fft_res', "", true);
  1718. Blockly.Python.addVariable('fft_amp', "", true);
  1719. Blockly.Python.addVariable('read_all_channel', "read_all_channel = [0, 0, 0, 0, 0, 0, 0, 0]", true); // Blockly.Python.addVariable('_recorder_rx', "", true);
  1720. var _code = "" + "";
  1721. return _code;
  1722. };
  1723. Blockly.Blocks['mphone_audio_spectrum_init'] = {
  1724. init: function init() {
  1725. this.appendDummyInput().appendField(new Blockly.FieldImage("blockly/media/ai_audio_spectrum.png", 45, 45, {
  1726. alt: "*",
  1727. flipRtl: "FALSE"
  1728. }));
  1729. this.appendDummyInput().appendField(Blockly.Msg.ai_microphone_start_spectrum_analyze);
  1730. this.setPreviousStatement(true, null);
  1731. this.setNextStatement(true, null);
  1732. this.setColour("#5fcd8e");
  1733. this.setTooltip("");
  1734. this.setHelpUrl("");
  1735. }
  1736. };
  1737. Blockly.Python['mphone_audio_spectrum_init'] = function (block) {
  1738. // TODO: Assemble Python into code variable.
  1739. var code = "" + "_audio = _recorder_rx.record(sample_points)\n" + "fft_res = FFT.run(_audio.to_bytes(),fft_points)\n" + "fft_amp = FFT.amplitude(fft_res)\n\n" + "read_all_channel[0] = int(_microphone_read_average(fft_amp[0:63]))\n" + "read_all_channel[1] = int(_microphone_read_average(fft_amp[64:127]))\n" + "read_all_channel[2] = int(_microphone_read_average(fft_amp[127:191]))\n" + "read_all_channel[3] = int(_microphone_read_average(fft_amp[192:255]))\n" + "read_all_channel[4] = int(_microphone_read_average(fft_amp[256:319]))\n" + "read_all_channel[5] = int(_microphone_read_average(fft_amp[320:383]))\n" + "read_all_channel[6] = int(_microphone_read_average(fft_amp[384:447]))\n" + "read_all_channel[7] = int(_microphone_read_average(fft_amp[448:514]))\n" + "";
  1740. return code;
  1741. };
  1742. Blockly.Blocks['ai_mphone_read_sound_sensitivity'] = {
  1743. init: function init() {
  1744. this.appendDummyInput().appendField(Blockly.Msg.ai_microphone_get_spectrum_analyze_result).appendField(new Blockly.FieldDropdown([[Blockly.Msg.ai_microphone_get_spectrum_analyze_result_1, "0"], [Blockly.Msg.ai_microphone_get_spectrum_analyze_result_2, "1"], [Blockly.Msg.ai_microphone_get_spectrum_analyze_result_3, "2"], [Blockly.Msg.ai_microphone_get_spectrum_analyze_result_4, "3"], [Blockly.Msg.ai_microphone_get_spectrum_analyze_result_5, "4"], [Blockly.Msg.ai_microphone_get_spectrum_analyze_result_6, "5"], [Blockly.Msg.ai_microphone_get_spectrum_analyze_result_7, "6"], [Blockly.Msg.ai_microphone_get_spectrum_analyze_result_8, "7"]]), "level");
  1745. this.setOutput(true, null);
  1746. this.setColour("#5fcd8e");
  1747. this.setTooltip("");
  1748. this.setHelpUrl("");
  1749. }
  1750. };
  1751. Blockly.Python['ai_mphone_read_sound_sensitivity'] = function (block) {
  1752. var dropdown_level = block.getFieldValue('level'); // TODO: Assemble Python into code variable.
  1753. var code = 'read_all_channel[' + dropdown_level + ']'; // TODO: Change ORDER_NONE to the correct strength.
  1754. return [code, Blockly.Python.ORDER_NONE];
  1755. };
  1756. /*
  1757. _ ___ _ _ _
  1758. / \ |_ _| / \ _ _ __| (_) ___
  1759. / _ \ | | / _ \| | | |/ _` | |/ _ \
  1760. / ___ \ | | / ___ \ |_| | (_| | | (_) |
  1761. /_/ \_\___| /_/ \_\__,_|\__,_|_|\___/
  1762. */
  1763. Blockly.Blocks['ai_audio_init'] = {
  1764. init: function init() {
  1765. this.appendDummyInput().appendField(new Blockly.FieldImage("blockly/media/speaker_init_header.png", 45, 45, {
  1766. alt: "*",
  1767. flipRtl: "FALSE"
  1768. }));
  1769. this.appendDummyInput().appendField(Blockly.Msg.ai_audio_init);
  1770. this.setColour("#603ea0");
  1771. this.setTooltip("");
  1772. this.setHelpUrl("");
  1773. this.setPreviousStatement(true);
  1774. this.setNextStatement(true);
  1775. }
  1776. };
  1777. Blockly.Python.ai_audio_init = function (block) {
  1778. Blockly.Python.definitions_.import_Maix = "from Maix import I2S, GPIO";
  1779. Blockly.Python.definitions_.import_fpioa_manager = "from fpioa_manager import *";
  1780. Blockly.Python.definitions_.import_audio = "import audio";
  1781. var _code = "";
  1782. return _code;
  1783. };
  1784. Blockly.Blocks['ai_audio_play_song'] = {
  1785. init: function init() {
  1786. this.appendDummyInput().appendField(Blockly.Msg.ai_audio_play_music_file);
  1787. this.appendDummyInput().appendField(Blockly.Msg.ai_audio_play_music_file_set_vol).appendField(new Blockly.FieldNumber(95, 0, 100, 1), "play_vol");
  1788. this.appendValueInput("path").setCheck(null).appendField(Blockly.Msg.ai_audio_play_music_file_set_file_path);
  1789. this.setPreviousStatement(true, null);
  1790. this.setNextStatement(true, null);
  1791. this.setColour("#603ea0");
  1792. this.setTooltip("");
  1793. this.setHelpUrl("");
  1794. }
  1795. };
  1796. Blockly.Python['ai_audio_play_song'] = function (block) {
  1797. var number_play_vol = block.getFieldValue('play_vol');
  1798. var value_name = Blockly.Python.valueToCode(block, 'path', Blockly.Python.ORDER_ATOMIC);
  1799. var _in = "" + "_audio_rx = I2S(I2S.DEVICE_0)\n" + "\n" + "def _speaker_play_song(path, volume):\n" + " global _audio_play_state\n" + " _player = audio.Audio(path = path)\n" + " _player.volume(volume)\n" + " _wav_info = _player.play_process(_audio_rx)\n" + " _audio_rx.channel_config(_audio_rx.CHANNEL_1, I2S.TRANSMITTER, resolution = I2S.RESOLUTION_16_BIT, align_mode = I2S.STANDARD_MODE)\n" + " _audio_rx.set_sample_rate(_wav_info[1])\n" + " _audio_play_state = 0\n" + "\n" + " fm.register(34,fm.fpioa.I2S0_OUT_D1)\n" + " fm.register(35,fm.fpioa.I2S0_SCLK)\n" + " fm.register(33,fm.fpioa.I2S0_WS)\n" + "\n" + " while True:\n" + " _audio_play_state = _player.play()\n" + " if (_audio_play_state) == True:\n" + " print(\"Playing.\")\n" + " elif (_audio_play_state) == False:\n" + " print(\"Done.\")\n" + " break\n" + "\n"; // Blockly.Python.definitions_.import_audio = _in;
  1800. Blockly.Python.addVariable('_audio_play_state', _in, true); // Blockly.Python.addSetup("ai_audio_read", _in);
  1801. var _code = "_speaker_play_song(path=" + value_name + ", volume=" + number_play_vol + ")\n";
  1802. return _code;
  1803. };
  1804. Blockly.Blocks['ai_audio_play_state'] = {
  1805. init: function init() {
  1806. this.appendDummyInput().appendField(Blockly.Msg.ai_audio_get_play_status);
  1807. this.setOutput(true, null);
  1808. this.setColour("#603ea0");
  1809. this.setTooltip("");
  1810. this.setHelpUrl("");
  1811. }
  1812. };
  1813. Blockly.Python['ai_audio_play_state'] = function (block) {
  1814. // TODO: Assemble Python into code variable.
  1815. var code = '_audio_play_state'; // TODO: Change ORDER_NONE to the correct strength.
  1816. return [code, Blockly.Python.ORDER_NONE];
  1817. };
  1818. Blockly.Blocks['ai_audio_play_finish'] = {
  1819. init: function init() {
  1820. this.appendDummyInput().appendField(Blockly.Msg.ai_audio_end_play);
  1821. this.setPreviousStatement(true, null);
  1822. this.setNextStatement(true, null);
  1823. this.setColour("#603ea0");
  1824. this.setTooltip("");
  1825. this.setHelpUrl("");
  1826. }
  1827. };
  1828. Blockly.Python['ai_audio_play_finish'] = function (block) {
  1829. // TODO: Assemble Python into code variable.
  1830. var code = '_player.finish()\n';
  1831. return code;
  1832. };
  1833. Blockly.Blocks['ai_audio_set'] = {
  1834. init: function init() {
  1835. this.appendValueInput("Num").setCheck(null).appendField(Blockly.Msg.ai_audio_set_music_vol);
  1836. this.setInputsInline(true);
  1837. this.setPreviousStatement(true, null);
  1838. this.setNextStatement(true, null);
  1839. this.setColour("#603ea0");
  1840. this.setTooltip("");
  1841. this.setHelpUrl("");
  1842. }
  1843. };
  1844. Blockly.Python.ai_audio_set = function (block) {
  1845. var _num = Blockly.Python.valueToCode(block, 'Num', Blockly.Python.ORDER_ATOMIC);
  1846. var _code = "_player.volume(" + _num + ")\n";
  1847. return _code;
  1848. };
  1849. /*
  1850. _ ___ ____ _
  1851. / \ |_ _| / ___| _ __ ___ __ _| | _____ _ __
  1852. / _ \ | | \___ \| '_ \ / _ \/ _` | |/ / _ \ '__|
  1853. / ___ \ _ | | _ ___) | |_) | __/ (_| | < __/ |
  1854. /_/ \_(_)___(_) |____/| .__/ \___|\__,_|_|\_\___|_|
  1855. |_|
  1856. */
  1857. Blockly.Blocks['ai_audio_init_speaker'] = {
  1858. init: function init() {
  1859. this.appendDummyInput().appendField(new Blockly.FieldImage("blockly/media/speaker_init_header.png", 45, 45, {
  1860. alt: "*",
  1861. flipRtl: "FALSE"
  1862. }));
  1863. this.appendDummyInput().appendField(Blockly.Msg.ai_audio_init);
  1864. this.setColour("#5f7fc1");
  1865. this.setTooltip("");
  1866. this.setHelpUrl("");
  1867. this.setPreviousStatement(true);
  1868. this.setNextStatement(true);
  1869. }
  1870. };
  1871. Blockly.Python.ai_audio_init_speaker = function (block) {
  1872. Blockly.Python.definitions_.import_Maix = "from Maix import I2S, GPIO";
  1873. Blockly.Python.definitions_.import_fpioa_manager = "from fpioa_manager import *";
  1874. Blockly.Python.definitions_.import_audio = "import audio";
  1875. var _code = "";
  1876. return _code;
  1877. };
  1878. Blockly.Blocks['ai_audio_play_song_speaker'] = {
  1879. init: function init() {
  1880. this.appendDummyInput().appendField(Blockly.Msg.ai_audio_play_music_file);
  1881. // this.appendDummyInput().appendField(Blockly.Msg.ai_audio_play_music_file_set_vol).appendField(new Blockly.FieldNumber(95, 0, 100, 1), "play_vol");
  1882. this.appendValueInput("volume").setCheck(null).appendField(Blockly.Msg.ai_audio_play_music_file_set_vol);
  1883. this.appendValueInput("path").setCheck(null).appendField(Blockly.Msg.ai_audio_play_music_file_set_file_path);
  1884. this.setPreviousStatement(true, null);
  1885. this.setNextStatement(true, null);
  1886. this.setColour("#5f7fc1");
  1887. this.setTooltip("");
  1888. this.setHelpUrl("");
  1889. }
  1890. };
  1891. Blockly.Python['ai_audio_play_song_speaker'] = function (block) {
  1892. // var number_play_vol = block.getFieldValue('play_vol');
  1893. var number_play_vol = Blockly.Python.valueToCode(block, 'volume', Blockly.Python.ORDER_ATOMIC);
  1894. var value_name = Blockly.Python.valueToCode(block, 'path', Blockly.Python.ORDER_ATOMIC);
  1895. var _in = "" + "_audio_rx = I2S(I2S.DEVICE_0)\n" + "\n" + "def _speaker_play_song(path, volume):\n" + " global _audio_play_state\n" + " _player = audio.Audio(path = path)\n" + " _player.volume(volume)\n" + " _wav_info = _player.play_process(_audio_rx)\n" + " _audio_rx.channel_config(_audio_rx.CHANNEL_1, I2S.TRANSMITTER, resolution = I2S.RESOLUTION_16_BIT, align_mode = I2S.STANDARD_MODE)\n" + " _audio_rx.set_sample_rate(_wav_info[1])\n" + " _audio_play_state = 0\n" + "\n" + " fm.register(34,fm.fpioa.I2S0_OUT_D1)\n" + " fm.register(35,fm.fpioa.I2S0_SCLK)\n" + " fm.register(33,fm.fpioa.I2S0_WS)\n" + "\n" + " while True:\n" + " _audio_play_state = _player.play()\n" + " if (_audio_play_state) == True:\n" + " print(\"Playing.\")\n" + " elif (_audio_play_state) == False:\n" + " print(\"Done.\")\n" + " break\n" + "\n"; // Blockly.Python.definitions_.import_audio = _in;
  1896. Blockly.Python.addVariable('_audio_play_state', _in, true); // Blockly.Python.addSetup("ai_audio_read", _in);
  1897. var _code = "_speaker_play_song(path=" + value_name + ", volume=" + number_play_vol + ")\n";
  1898. return _code;
  1899. };
  1900. Blockly.Blocks['ai_audio_play_state_speaker'] = {
  1901. init: function init() {
  1902. this.appendDummyInput().appendField(Blockly.Msg.ai_audio_get_play_status);
  1903. this.setOutput(true, null);
  1904. this.setColour("#5f7fc1");
  1905. this.setTooltip("");
  1906. this.setHelpUrl("");
  1907. }
  1908. };
  1909. Blockly.Python['ai_audio_play_state_speaker'] = function (block) {
  1910. // TODO: Assemble Python into code variable.
  1911. var code = '_audio_play_state'; // TODO: Change ORDER_NONE to the correct strength.
  1912. return [code, Blockly.Python.ORDER_NONE];
  1913. };
  1914. Blockly.Blocks['ai_audio_play_finish_speaker'] = {
  1915. init: function init() {
  1916. this.appendDummyInput().appendField(Blockly.Msg.ai_audio_end_play);
  1917. this.setPreviousStatement(true, null);
  1918. this.setNextStatement(true, null);
  1919. this.setColour("#5f7fc1");
  1920. this.setTooltip("");
  1921. this.setHelpUrl("");
  1922. }
  1923. };
  1924. Blockly.Python['ai_audio_play_finish_speaker'] = function (block) {
  1925. // TODO: Assemble Python into code variable.
  1926. var code = '_player.finish()\n';
  1927. return code;
  1928. };
  1929. Blockly.Blocks['ai_audio_set_speaker'] = {
  1930. init: function init() {
  1931. this.appendValueInput("Num").setCheck(null).appendField(Blockly.Msg.ai_audio_set_music_vol);
  1932. this.setInputsInline(true);
  1933. this.setPreviousStatement(true, null);
  1934. this.setNextStatement(true, null);
  1935. this.setColour("#5f7fc1");
  1936. this.setTooltip("");
  1937. this.setHelpUrl("");
  1938. }
  1939. };
  1940. Blockly.Python.ai_audio_set_speaker = function (block) {
  1941. var _num = Blockly.Python.valueToCode(block, 'Num', Blockly.Python.ORDER_ATOMIC);
  1942. var _code = "_player.volume(" + _num + ")\n";
  1943. return _code;
  1944. };
  1945. /*
  1946. _ ___ __ ___ _
  1947. / \ |_ _| \ \ / (_) __| | ___ ___
  1948. / _ \ | | \ \ / /| |/ _` |/ _ \/ _ \
  1949. / ___ \ | | \ V / | | (_| | __/ (_) |
  1950. /_/ \_\___| \_/ |_|\__,_|\___|\___/
  1951. */
  1952. Blockly.Blocks['ai_video_record_setup'] = {
  1953. init: function init() {
  1954. this.appendDummyInput().appendField(new Blockly.FieldImage("blockly/media/video_record_init_header.png", 45, 45, {
  1955. alt: "*",
  1956. flipRtl: "FALSE"
  1957. }));
  1958. this.appendDummyInput().appendField(Blockly.Msg.ai_video_start_recording);
  1959. this.appendValueInput("save_path").setCheck(null).appendField(Blockly.Msg.ai_video_start_recording_file_path);
  1960. this.appendValueInput("w").setCheck(null).appendField(Blockly.Msg.ai_video_start_recording_width);
  1961. this.appendValueInput("h").setCheck(null).appendField(Blockly.Msg.ai_video_start_recording_height);
  1962. this.setPreviousStatement(true, null);
  1963. this.setNextStatement(true, null);
  1964. this.setColour("#60c1bb");
  1965. this.setTooltip("");
  1966. this.setHelpUrl("");
  1967. }
  1968. };
  1969. Blockly.Python['ai_video_record_setup'] = function (block) {
  1970. var value_save_path = Blockly.Python.valueToCode(block, 'save_path', Blockly.Python.ORDER_ATOMIC);
  1971. var value_w = Blockly.Python.valueToCode(block, 'w', Blockly.Python.ORDER_ATOMIC);
  1972. var value_h = Blockly.Python.valueToCode(block, 'h', Blockly.Python.ORDER_ATOMIC);
  1973. Blockly.Python.definitions_.import_video = "import video";
  1974. Blockly.Python.definitions_.import_Maix = "from Maix import GPIO";
  1975. Blockly.Python.addVariable('record_vid', 'record_vid = None', true); // TODO: Assemble Python into code variable.
  1976. var code = "_record_vid = video.open(" + value_save_path + ", record=1, width=" + value_w + ", height=" + value_h + ", interval=20000, quality=80)\n";
  1977. return code;
  1978. };
  1979. Blockly.Blocks['ai_video_get'] = {
  1980. init: function init() {
  1981. this.appendDummyInput().appendField(Blockly.Msg.ai_video_to_canvas).appendField(new Blockly.FieldVariable("canvas"), "varitem").appendField(Blockly.Msg.ai_video_record);
  1982. this.setInputsInline(false);
  1983. this.setPreviousStatement(true, null);
  1984. this.setNextStatement(true, null);
  1985. this.setColour("#60c1bb");
  1986. this.setTooltip("");
  1987. this.setHelpUrl("");
  1988. }
  1989. };
  1990. Blockly.Python.ai_video_get = function (block) {
  1991. var variable_name = Blockly.Python.variableDB_.getName(block.getFieldValue('varitem'), Blockly.Variables.NAME_TYPE);
  1992. var _code = "_record_vid.record(" + variable_name + ")\n";
  1993. return _code;
  1994. };
  1995. Blockly.Blocks['ai_video_stop'] = {
  1996. init: function init() {
  1997. this.appendDummyInput().appendField(Blockly.Msg.ai_video_stop_recording);
  1998. this.setPreviousStatement(true);
  1999. this.setNextStatement(true);
  2000. this.setColour("#60c1bb");
  2001. this.setTooltip("");
  2002. this.setHelpUrl("");
  2003. }
  2004. };
  2005. Blockly.Python.ai_video_stop = function (block) {
  2006. var _code = "_record_vid.record_finish()\n";
  2007. return _code;
  2008. };
  2009. Blockly.Blocks['ai_video_set'] = {
  2010. init: function init() {
  2011. this.appendDummyInput().appendField(new Blockly.FieldImage("blockly/media/video_init_header.png", 45, 45, {
  2012. alt: "*",
  2013. flipRtl: "FALSE"
  2014. }));
  2015. this.appendDummyInput().appendField(Blockly.Msg.ai_video_play_video);
  2016. this.appendDummyInput().appendField(Blockly.Msg.ai_video_play_video_2);
  2017. this.appendValueInput("path").setCheck(null).appendField(Blockly.Msg.ai_video_play_video_file_path);
  2018. this.setPreviousStatement(true, null);
  2019. this.setNextStatement(true, null);
  2020. this.setColour("#4d9994");
  2021. this.setTooltip("");
  2022. this.setHelpUrl("");
  2023. }
  2024. };
  2025. Blockly.Python['ai_video_set'] = function (block) {
  2026. Blockly.Python.definitions_.import_video = "import video";
  2027. Blockly.Python.definitions_.import_Maix = "from Maix import GPIO";
  2028. Blockly.Python.addVariable('_video_play', '', true);
  2029. var value_path = Blockly.Python.valueToCode(block, 'path', Blockly.Python.ORDER_ATOMIC);
  2030. var code = '_video_play = video.open(' + value_path + ')\n';
  2031. return code;
  2032. };
  2033. Blockly.Blocks['ai_video_stop_play'] = {
  2034. init: function init() {
  2035. this.appendDummyInput().appendField(Blockly.Msg.ai_video_stop_video_playing);
  2036. this.setPreviousStatement(true, null);
  2037. this.setNextStatement(true, null);
  2038. this.setColour("#4d9994");
  2039. this.setTooltip("");
  2040. this.setHelpUrl("");
  2041. }
  2042. };
  2043. Blockly.Python['ai_video_stop_play'] = function (block) {
  2044. // TODO: Assemble Python into code variable.
  2045. var code = '_video_play.__del__()\n';
  2046. return code;
  2047. };
  2048. Blockly.Blocks['ai_video_status'] = {
  2049. init: function init() {
  2050. this.appendDummyInput().appendField(Blockly.Msg.ai_video_get_video_playing_status);
  2051. this.setOutput(true, null);
  2052. this.setColour("#4d9994");
  2053. this.setTooltip("");
  2054. this.setHelpUrl("");
  2055. }
  2056. };
  2057. Blockly.Python.ai_video_status = function (block) {
  2058. var code = "_video_play.play()";
  2059. return [code, Blockly.Python.ORDER_NONE];
  2060. };
  2061. /*
  2062. _ ___ __ __ _ _
  2063. / \ |_ _| | \/ | ___ __| | ___| |___
  2064. / _ \ | | | |\/| |/ _ \ / _` |/ _ \ / __|
  2065. / ___ \ | | | | | | (_) | (_| | __/ \__ \
  2066. /_/ \_\___| |_| |_|\___/ \__,_|\___|_|___/
  2067. */
  2068. Blockly.Blocks['ai_model_allinit'] = {
  2069. init: function init() {
  2070. this.appendDummyInput().appendField(Blockly.Msg.ai_models_init_title).appendField(new Blockly.FieldDropdown([[Blockly.Msg.ai_models_init_hand_written_model, "Single Digit Recognition"], [Blockly.Msg.ai_models_init_object_model, "Common Object Recognition"], [Blockly.Msg.ai_models_init_face_model, "Human Face Recognition"]]), "DEGREE");
  2071. this.appendDummyInput().appendField(Blockly.Msg.ai_models_init_source).appendField(new Blockly.FieldVariable("img_mnist"), "varitem");
  2072. this.setPreviousStatement(true, null);
  2073. this.setNextStatement(true, null);
  2074. this.setColour("#ee783a");
  2075. this.setTooltip('');
  2076. this.setHelpUrl('');
  2077. }
  2078. };
  2079. Blockly.Python.ai_model_allinit = function (block) {
  2080. var variable_name = Blockly.Python.variableDB_.getName(block.getFieldValue('varitem'), Blockly.Variables.NAME_TYPE);
  2081. Blockly.Python.definitions_.import_KPU = "import KPU as kpu";
  2082. var degee = block.getFieldValue('DEGREE');
  2083. var _code = "";
  2084. if (degee == "Single Digit Recognition") {
  2085. Blockly.Python.addVariable('task_mnist', "task_mnist = kpu.load(\"/sd/preset/models/mnist.kmodel\")\n", true); // Blockly.Python.addVariable('img_mnist1', '', true);
  2086. // Blockly.Python.addVariable('img_mnist_resized', '', true);
  2087. _code += "img_mnist1=img_mnist.to_grayscale(1)\n";
  2088. _code += "img_mnist_resized=img_mnist1.resize(28,28)\n";
  2089. _code += "a=img_mnist_resized.invert()\n";
  2090. _code += "a=img_mnist_resized.strech_char(1)\n";
  2091. _code += "a=img_mnist_resized.pix_to_ai()\n";
  2092. _code += "fmap_mnist=kpu.forward(task_mnist, " + variable_name + ")\n";
  2093. _code += "plist_mnist=fmap_mnist[:]\n";
  2094. _code += "pmax_mnist=max(plist_mnist)\n";
  2095. _code += "max_index_mnist=plist_mnist.index(pmax_mnist)\n";
  2096. } else if (degee == "Common Object Recognition") {
  2097. Blockly.Python.addVariable('task_objectrecognition', '', true);
  2098. Blockly.Python.addVariable('img_objectrecognition', '' + 'classes_objectrecognition = [\'aeroplane\', \'bicycle\', \'bird\', \'boat\', \'bottle\', \'bus\', \'car\', \'cat\', \'chair\', \'cow\', \'diningtable\', \'dog\', \'horse\', \'motorbike\', \'person\', \'pottedplant\', \'sheep\', \'sofa\', \'train\', \'tvmonitor\']\n' + 'task_objectrecognition = kpu.load("/sd/preset/models/tinyyolo_v2_20class.kmodel")\n' + 'object_anchor = (1.08, 1.19, 3.42, 4.41, 6.63, 11.38, 9.42, 5.11, 16.62, 10.52)\n' + 'a = kpu.init_yolo2(task_objectrecognition, 0.5, 0.3, 5, object_anchor)\n' + '', true); // Blockly.Python.addVariable('code_objectrecognition', '', true);
  2099. _code += "code_objectrecognition = kpu.run_yolo2(task_objectrecognition, " + variable_name + ")\n";
  2100. _code += variable_name + ".ai_to_pix()\n";
  2101. } else {
  2102. Blockly.Python.addVariable('task_facerecognition', '', true); // Blockly.Python.addVariable('task_facerecognition', '', true);
  2103. Blockly.Python.addVariable('img_facerecognition', "" + "task_facerecognition = kpu.load(\"/sd/preset/models/preset/face-recognition.kmodel\")\n" + "anchor_face = (1.889, 2.5245, 2.9465, 3.94056, 3.99987, 5.3658, 5.155437, 6.92275, 6.718375, 9.01025)\n" + "a = kpu.init_yolo2(task_facerecognition, 0.5, 0.3, 5, anchor_face)\n" + "\n", true); // Blockly.Python.addVariable('code_facerecognition', '', true);
  2104. _code += "code_facerecognition = kpu.run_yolo2(task_facerecognition, " + variable_name + ")\n";
  2105. _code += variable_name + ".ai_to_pix()\n";
  2106. }
  2107. return _code;
  2108. };
  2109. Blockly.Blocks['ai_model_index_mnist'] = {
  2110. init: function init() {
  2111. this.appendDummyInput().appendField(new Blockly.FieldImage("blockly/media/digit_recognition_header.png", 45, 45, {
  2112. alt: "*",
  2113. flipRtl: "FALSE"
  2114. }));
  2115. this.appendDummyInput().appendField(Blockly.Msg.ai_models_hand_written_model_result);
  2116. this.appendDummyInput().appendField(new Blockly.FieldDropdown([[Blockly.Msg.ai_models_hand_written_model_number, "c"], [Blockly.Msg.ai_models_hand_written_model_confidence, "confidence"]]), "value");
  2117. this.setOutput(true, null);
  2118. this.setColour("#ee783a");
  2119. this.setTooltip('');
  2120. this.setHelpUrl('');
  2121. }
  2122. };
  2123. Blockly.Python.ai_model_index_mnist = function (block) {
  2124. var value = block.getFieldValue('value');
  2125. var _code = "max_index_mnist";
  2126. if (value == "confidence") {
  2127. _code = "int(pmax_mnist*100)";
  2128. }
  2129. return [_code, Blockly.Python.ORDER_ATOMIC];
  2130. };
  2131. Blockly.Blocks['ai_model_look'] = {
  2132. init: function init() {
  2133. this.appendDummyInput().appendField(Blockly.Msg.ai_models_object_model_if);
  2134. this.setInputsInline(false);
  2135. this.setOutput(true, null);
  2136. this.setColour("#ee783a");
  2137. this.setTooltip("");
  2138. this.setHelpUrl("");
  2139. }
  2140. };
  2141. Blockly.Python.ai_model_look = function (block) {
  2142. var _code = "code_objectrecognition";
  2143. return [_code, Blockly.Python.ORDER_ATOMIC];
  2144. };
  2145. Blockly.Blocks['ai_model_get'] = {
  2146. init: function init() {
  2147. this.appendDummyInput().appendField(new Blockly.FieldImage("blockly/media/object_recognition_header.png", 45, 45, {
  2148. alt: "*",
  2149. flipRtl: "FALSE"
  2150. }));
  2151. this.appendDummyInput().appendField(Blockly.Msg.ai_models_from).appendField(new Blockly.FieldVariable("i"), "varitem").appendField(Blockly.Msg.ai_models_object_model_get).appendField(new Blockly.FieldDropdown([[Blockly.Msg.ai_models_object_model_name, "Object"], [Blockly.Msg.ai_models_object_model_x, "X"], [Blockly.Msg.ai_models_object_model_y, "Y"], [Blockly.Msg.ai_models_object_model_w, "W"], [Blockly.Msg.ai_models_object_model_h, "H"], [Blockly.Msg.ai_models_object_model_count, "Number"], [Blockly.Msg.ai_models_object_model_index, "Serial"], [Blockly.Msg.ai_models_object_model_confidence, "Confidence"]]), "TYPE");
  2152. this.setInputsInline(false);
  2153. this.setOutput(true, null);
  2154. this.setColour("#ee783a");
  2155. this.setTooltip("");
  2156. this.setHelpUrl("");
  2157. }
  2158. };
  2159. Blockly.Python.ai_model_get = function (block) {
  2160. var type = block.getFieldValue('TYPE');
  2161. var variable_name = Blockly.Python.variableDB_.getName(block.getFieldValue('varitem'), Blockly.Variables.NAME_TYPE);
  2162. var _code = "";
  2163. if (type == "Object") {
  2164. _code = "classes_objectrecognition[" + variable_name + ".classid()]";
  2165. } else if (type == "X") {
  2166. _code = variable_name + ".x()";
  2167. } else if (type == "Y") {
  2168. _code = variable_name + ".y()";
  2169. } else if (type == "W") {
  2170. _code = variable_name + ".w()";
  2171. } else if (type == "H") {
  2172. _code = variable_name + ".h()";
  2173. } else if (type == "Number") {
  2174. _code = variable_name + ".objnum()";
  2175. } else if (type == "Serial") {
  2176. _code = variable_name + ".index()";
  2177. } else if (type == "Confidence") {
  2178. _code = variable_name + ".value()";
  2179. }
  2180. return [_code, Blockly.Python.ORDER_ATOMIC];
  2181. };
  2182. Blockly.Blocks['ai_model_face'] = {
  2183. init: function init() {
  2184. this.appendDummyInput().appendField(Blockly.Msg.ai_models_face_model_if);
  2185. this.setInputsInline(false);
  2186. this.setOutput(true, null);
  2187. this.setColour("#ee783a");
  2188. this.setTooltip("");
  2189. this.setHelpUrl("");
  2190. }
  2191. };
  2192. Blockly.Python.ai_model_face = function (block) {
  2193. var _code = "code_facerecognition";
  2194. return [_code, Blockly.Python.ORDER_ATOMIC];
  2195. };
  2196. Blockly.Blocks['ai_model_xy'] = {
  2197. init: function init() {
  2198. this.appendDummyInput().appendField(new Blockly.FieldImage("blockly/media/face_recognition_header.png", 45, 45, {
  2199. alt: "*",
  2200. flipRtl: "FALSE"
  2201. }));
  2202. this.appendDummyInput().appendField(Blockly.Msg.ai_models_from).appendField(new Blockly.FieldVariable("i"), "varitem").appendField(Blockly.Msg.ai_models_face_model_get).appendField(new Blockly.FieldDropdown([[Blockly.Msg.ai_models_face_model_x, "X"], [Blockly.Msg.ai_models_face_model_y, "Y"], [Blockly.Msg.ai_models_face_model_w, "W"], [Blockly.Msg.ai_models_face_model_h, "H"], [Blockly.Msg.ai_models_face_model_count, "Number"], [Blockly.Msg.ai_models_face_model_index, "Serial"], [Blockly.Msg.ai_models_face_model_confidence, "Confidence"]]), "TYPE");
  2203. this.setInputsInline(false);
  2204. this.setOutput(true, null);
  2205. this.setColour("#ee783a");
  2206. this.setTooltip("");
  2207. this.setHelpUrl("");
  2208. }
  2209. };
  2210. Blockly.Python.ai_model_xy = function (block) {
  2211. var type = block.getFieldValue('TYPE');
  2212. var variable_name = Blockly.Python.variableDB_.getName(block.getFieldValue('varitem'), Blockly.Variables.NAME_TYPE);
  2213. var _code = "";
  2214. if (type == "X") {
  2215. _code = variable_name + ".x()";
  2216. } else if (type == "Y") {
  2217. _code = variable_name + ".y()";
  2218. } else if (type == "W") {
  2219. _code = variable_name + ".w()";
  2220. } else if (type == "H") {
  2221. _code = variable_name + ".h()";
  2222. } else if (type == "Number") {
  2223. _code = variable_name + ".objnum()";
  2224. } else if (type == "Serial") {
  2225. _code = variable_name + ".index()";
  2226. } else if (type == "Confidence") {
  2227. _code = variable_name + ".value()";
  2228. }
  2229. return [_code, Blockly.Python.ORDER_ATOMIC];
  2230. };
  2231. Blockly.Blocks['ai_model_customized_init_setup'] = {
  2232. init: function init() {
  2233. this.appendDummyInput().appendField(Blockly.Msg.ai_models_customized_init_setup_title);
  2234. this.appendDummyInput().appendField(Blockly.Msg.ai_models_customized_init_setup_path).appendField(new Blockly.FieldTextInput("/sd/user/mymodel.kmodel"), "model_path");
  2235. this.appendDummyInput().appendField(Blockly.Msg.ai_models_customized_init_setup_source).appendField(new Blockly.FieldVariable("camera"), "varitem");
  2236. this.appendValueInput("class_input").setCheck(null).appendField(Blockly.Msg.ai_models_customized_init_setup_name);
  2237. this.setPreviousStatement(true, null);
  2238. this.setNextStatement(true, null);
  2239. this.setColour("#ee783a");
  2240. this.setTooltip("");
  2241. this.setHelpUrl("");
  2242. }
  2243. };
  2244. Blockly.Python['ai_model_customized_init_setup'] = function (block) {
  2245. var value_class_input = Blockly.Python.valueToCode(block, 'class_input', Blockly.Python.ORDER_ATOMIC);
  2246. var variable_name = Blockly.Python.variableDB_.getName(block.getFieldValue('varitem'), Blockly.Variables.NAME_TYPE);
  2247. var text_model_path = block.getFieldValue('model_path');
  2248. Blockly.Python.definitions_.import_KPU_customized = "import KPU as kpu";
  2249. Blockly.Python.addVariable('task_customized_model', '' + 'task_customized_model = kpu.load("' + text_model_path + '")\n' + 'anchor_customized_model = (0.57273, 0.677385, 1.87446, 2.06253, 3.33843, 5.47434, 7.88282, 3.52778, 9.77052, 9.16828)\n' + 'a = kpu.init_yolo2(task_customized_model, 0.6, 0.3, 5, anchor_customized_model)\n' + '', true);
  2250. Blockly.Python.addVariable('classes_customized_model', '' + 'classes_customized_model = ' + value_class_input + '\n' + '', true);
  2251. var code = 'code_customized_model = kpu.run_yolo2(task_customized_model, ' + variable_name + ')\n';
  2252. return code;
  2253. };
  2254. Blockly.Blocks['ai_model_customized_if_got'] = {
  2255. init: function init() {
  2256. this.appendDummyInput().appendField(Blockly.Msg.ai_models_customized_if_got);
  2257. this.setOutput(true, null);
  2258. this.setColour("#ee783a");
  2259. this.setTooltip("");
  2260. this.setHelpUrl("");
  2261. }
  2262. };
  2263. Blockly.Python['ai_model_customized_if_got'] = function (block) {
  2264. // TODO: Assemble Python into code variable.
  2265. var code = 'code_customized_model'; // TODO: Change ORDER_NONE to the correct strength.
  2266. return [code, Blockly.Python.ORDER_NONE];
  2267. };
  2268. Blockly.Blocks['ai_model_customized_get_result'] = {
  2269. init: function init() {
  2270. this.appendDummyInput().appendField(Blockly.Msg.ai_models_from).appendField(new Blockly.FieldVariable("i"), "varitem").appendField(Blockly.Msg.ai_models_customized_get_result_any).appendField(new Blockly.FieldDropdown([[Blockly.Msg.ai_models_customized_get_result_name, "classid"], [Blockly.Msg.ai_models_customized_get_result_x, "x"], [Blockly.Msg.ai_models_customized_get_result_y, "y"], [Blockly.Msg.ai_models_customized_get_result_w, "w"], [Blockly.Msg.ai_models_customized_get_result_h, "h"], [Blockly.Msg.ai_models_customized_get_result_count, "objnum"], [Blockly.Msg.ai_models_customized_get_result_index, "index"], [Blockly.Msg.ai_models_customized_get_result_confidence, "value"]]), "get_results");
  2271. this.setOutput(true, null);
  2272. this.setColour("#ee783a");
  2273. this.setTooltip("");
  2274. this.setHelpUrl("");
  2275. }
  2276. };
  2277. Blockly.Python['ai_model_customized_get_result'] = function (block) {
  2278. var variable_name = Blockly.Python.variableDB_.getName(block.getFieldValue('varitem'), Blockly.Variables.NAME_TYPE);
  2279. var dropdown_get_results = block.getFieldValue('get_results'); // TODO: Assemble Python into code variable.
  2280. if (dropdown_get_results == "classid") {
  2281. var code = 'classes_customized_model[' + variable_name + '.classid()]';
  2282. } else {
  2283. var code = variable_name + '.' + dropdown_get_results + '()';
  2284. } // TODO: Change ORDER_NONE to the correct strength.
  2285. return [code, Blockly.Python.ORDER_NONE];
  2286. };
  2287. /*
  2288. Blockly.Blocks['ai_model_init'] = {
  2289. init: function() {
  2290. this.appendDummyInput()
  2291. .appendField(Blockly.Msg.MODELLPM)
  2292. .appendField(new Blockly.FieldDropdown([
  2293. ["Single Digit Recognition", "Single Digit Recognition"],
  2294. ["Common Object Recognition", "Common Object Recognition"],
  2295. ["Animal Recognition", "Animal Recognition"],
  2296. ["Human Face Recognition", "Human Face Recognition"]
  2297. ]), "DEGREE")
  2298. this.setPreviousStatement(true, null);
  2299. this.setNextStatement(true, null);
  2300. this.setColour("#ee783a");
  2301. this.setTooltip('');
  2302. this.setHelpUrl('');
  2303. }
  2304. };
  2305. Blockly.Python.ai_model_init = function(block) {
  2306. Blockly.Python.definitions_.import_KPU = "import KPU as kpu";
  2307. var degee = block.getFieldValue('DEGREE');
  2308. var _code = ""
  2309. if (degee == "Single Digit Recognition") {
  2310. _code += "task_mnist = kpu.load(\"/sd/models/mnist.kmodel\")\n";
  2311. } else if (degee == "Common Object Recognition") {
  2312. _code += "classes_animalrecognition = ['aeroplane', 'bicycle', '', 'boat', 'bottle', 'bus', 'car', '', 'chair', '', 'diningtable', '', '', 'motorbike', 'person', 'pottedplant', '', 'sofa', 'train', 'tvmonitor']\n";
  2313. _code += "task_animalrecognition = kpu.load(\"/sd/models/object-recognition.kmodel\")\n";
  2314. _code += "anchor_animalrecognition = (1.08, 1.19, 3.42, 4.41, 6.63, 11.38, 9.42, 5.11, 16.62, 10.52)\n";
  2315. _code += "a = kpu.init_yolo2(task_animalrecognition, 0.5, 0.3, 5, anchor_animalrecognition)\n";
  2316. } else if (degee == "Animal Recognition") {
  2317. _code += "classes_animalrecognition = ['', '', 'bird', '', '', '', '', 'cat', '', 'cow', '', 'dog', 'horse', '', '', '', 'sheep', '', '', '']\n";
  2318. _code += "task_animalrecognition = kpu.load(\"/sd/models/animal-recognition.kmodel\")\n";
  2319. _code += "anchor_animalrecognition = (1.08, 1.19, 3.42, 4.41, 6.63, 11.38, 9.42, 5.11, 16.62, 10.52)\n";
  2320. _code += "a = kpu.init_yolo2(task_animalrecognition, 0.5, 0.3, 5, anchor_animalrecognition)\n";
  2321. } else {
  2322. _code += "task_facerecognition = kpu.load(\"/sd/models/face-recognition.kmodel\")\n";
  2323. _code += "anchor = (1.889, 2.5245, 2.9465, 3.94056, 3.99987, 5.3658, 5.155437, 6.92275, 6.718375, 9.01025)\n";
  2324. _code += "a = kpu.init_yolo2(task_facerecognition, 0.5, 0.3, 5, anchor)\n";
  2325. }
  2326. return _code;
  2327. }
  2328. Blockly.Blocks['ai_model_img_mnist'] = {
  2329. init: function() {
  2330. this.appendDummyInput()
  2331. .appendField(Blockly.Msg.CAMERINIT);
  2332. this.appendDummyInput()
  2333. .appendField(Blockly.Msg.CAMERINIT_SISF)
  2334. .appendField(new Blockly.FieldVariable("img_mnist"), "varitem");
  2335. this.setPreviousStatement(true, null);
  2336. this.setNextStatement(true, null);
  2337. this.setColour("#ee783a");
  2338. this.setTooltip('');
  2339. this.setHelpUrl('');
  2340. }
  2341. };
  2342. Blockly.Python.ai_model_img_mnist = function(block) {
  2343. var variable_name = Blockly.Python.variableDB_.getName(block.getFieldValue('varitem'), Blockly.Variables.NAME_TYPE);
  2344. var _code = "img_mnist1=" + variable_name + ".to_grayscale(1)\n"
  2345. _code += "img_mnist2=img_mnist1.resize(28,28)\n"
  2346. _code += "a=img_mnist2.invert()\n"
  2347. _code += "a=img_mnist2.strech_char(1)\n"
  2348. _code += "a=img_mnist2.pix_to_ai()\n"
  2349. _code += "fmap_mnist=kpu.forward(task_mnist,img_mnist2)\n"
  2350. _code += "plist_mnist=fmap_mnist[:]\n"
  2351. _code += "pmax_mnist=max(plist_mnist)\n"
  2352. _code += "max_index_mnist=plist_mnist.index(pmax_mnist)\n"
  2353. return _code;
  2354. }
  2355. */
  2356. /*
  2357. Blockly.Blocks['ai_model_pmax_mnist'] = {
  2358. init: function() {
  2359. this.appendDummyInput()
  2360. .appendField(Blockly.Msg.CAMERINIT_FPM)
  2361. this.appendDummyInput()
  2362. .appendField(Blockly.Msg.CAMERINIT_GTCS)
  2363. this.setOutput(true, null);
  2364. this.setColour("#ee783a");
  2365. this.setTooltip('');
  2366. this.setHelpUrl('');
  2367. }
  2368. };
  2369. Blockly.Python.ai_model_pmax_mnist = function(block) {
  2370. var _code = "int(pmax_mnist*100)\n"
  2371. return _code;
  2372. }
  2373. Blockly.Blocks['ai_model_objectrecognition'] = {
  2374. init: function() {
  2375. this.appendDummyInput()
  2376. .appendField(Blockly.Msg.CAMERINITPM)
  2377. this.appendDummyInput()
  2378. .appendField(Blockly.Msg.CAMERINITPM_SMSFIOR)
  2379. .appendField(new Blockly.FieldVariable("img_objectrecognition"), "varitem");
  2380. this.setPreviousStatement(true, null);
  2381. this.setNextStatement(true, null);
  2382. this.setColour("#ee783a");
  2383. this.setTooltip('');
  2384. this.setHelpUrl('');
  2385. }
  2386. };
  2387. Blockly.Python.ai_model_objectrecognition = function(block) {
  2388. var variable_name = Blockly.Python.variableDB_.getName(block.getFieldValue('varitem'), Blockly.Variables.NAME_TYPE);
  2389. var _code = "code_objectrecognition = kpu.run_yolo2(task_objectrecognition, " + variable_name + ")\n"
  2390. return _code;
  2391. }
  2392. Blockly.Blocks['ai_model_aobjectrecognition'] = {
  2393. init: function() {
  2394. this.appendDummyInput()
  2395. .appendField(Blockly.Msg.CAMERINITPM_ACOID)
  2396. this.setOutput(true, null);
  2397. this.setColour("#ee783a");
  2398. this.setTooltip('');
  2399. this.setHelpUrl('');
  2400. }
  2401. };
  2402. Blockly.Python.ai_model_aobjectrecognition = function(block) {
  2403. var _code = "code_objectrecognition\n"
  2404. return _code;
  2405. }
  2406. Blockly.Blocks['ai_model_ifaobjectrecognition'] = {
  2407. init: function() {
  2408. this.appendDummyInput()
  2409. .appendField(Blockly.Msg.OLCD_SETROTATION)
  2410. .appendField(new Blockly.FieldDropdown([
  2411. ["0°", "1"],
  2412. ["90°", "2"],
  2413. ["180°", "3"],
  2414. ["270°", "0"]
  2415. ]), "DEGREE")
  2416. .appendField(Blockly.Msg.OLCD_SETROTATION_DEGREE)
  2417. this.setPreviousStatement(true, null);
  2418. this.setNextStatement(true, null);
  2419. this.setColour("#ee783a");
  2420. this.setTooltip('');
  2421. this.setHelpUrl('');
  2422. }
  2423. };
  2424. Blockly.Python.ai_model_ifaobjectrecognition = function(block) {
  2425. // if code_objectrecognition: # if object is detected then do
  2426. // for i_objectrecognition in code_objectrecognition:
  2427. // # ...
  2428. var _code = "code_objectrecognition\n"
  2429. return _code;
  2430. }
  2431. Blockly.Blocks['ai_model_xyobjectreocgnition'] = {
  2432. init: function() {
  2433. this.appendDummyInput()
  2434. .appendField(Blockly.Msg.CAMERINITPM_FPM)
  2435. this.appendDummyInput()
  2436. .appendField(Blockly.Msg.CAMERINITPM_G)
  2437. .appendField(new Blockly.FieldDropdown([
  2438. ["X-Coordinate", "x"],
  2439. ["Y-Coordinate", "y"],
  2440. ["Width of the Detection Box", "w"],
  2441. ["Height of the Detection Box", "h"],
  2442. ["Number of Objects Detected", "objnum"],
  2443. ["Index of Object Detected", "index"],
  2444. ["Confidence Score (%)", "value"]
  2445. ]), "DEGREE")
  2446. .appendField(Blockly.Msg.CAMERINITPM_GIOTCOD)
  2447. this.setOutput(true, null);
  2448. this.setColour("#ee783a");
  2449. this.setTooltip('');
  2450. this.setHelpUrl('');
  2451. }
  2452. };
  2453. Blockly.Python.ai_model_xyobjectreocgnition = function(block) {
  2454. var degee = block.getFieldValue('DEGREE');
  2455. var _code = "i_objectreocgnition." + degee + "()\n"
  2456. return _code;
  2457. }
  2458. Blockly.Blocks['ai_model_cobjectrecognition'] = {
  2459. init: function() {
  2460. this.appendDummyInput()
  2461. .appendField(Blockly.Msg.CAMERINITPM_DCOIA)
  2462. .appendField(new Blockly.FieldDropdown([
  2463. ["Aeroplane", "Aeroplane"],
  2464. ["Bicycle", "Bicycle"],
  2465. ["Boat", "Boat"],
  2466. ["Bus", "Bus"],
  2467. ["Car", "Car"],
  2468. ["Chair", "Chair"],
  2469. ["Dining", "Dining"],
  2470. ["Table", "Table"],
  2471. ["Motorbike", "Motorbike"],
  2472. ["Person", "Person"],
  2473. ["Potted", "Potted"],
  2474. ["Plant", "Plant"],
  2475. ["Sofa", "Sofa"],
  2476. ["Train", "Train"],
  2477. ["Monitor", "Monitor"]
  2478. ]), "DEGREE")
  2479. .appendField(Blockly.Msg.OLCD_SETROTATION_DEGREE)
  2480. this.setOutput(true, null);
  2481. this.setColour("#ee783a");
  2482. this.setTooltip('');
  2483. this.setHelpUrl('');
  2484. }
  2485. };
  2486. Blockly.Python.ai_model_cobjectrecognition = function(block) {
  2487. var degee = block.getFieldValue('DEGREE');
  2488. var _code = "classes_objectrecognition[i.classid()]\n"
  2489. return _code;
  2490. }
  2491. Blockly.Blocks['ai_model_animalrecognition'] = {
  2492. init: function() {
  2493. this.appendDummyInput()
  2494. .appendField(Blockly.Msg.CAMERINITPMA)
  2495. this.appendDummyInput()
  2496. .appendField(Blockly.Msg.CAMERINITPM_SMSFIOR)
  2497. .appendField(new Blockly.FieldVariable("img_animalrecognition"), "varitem");
  2498. this.setPreviousStatement(true, null);
  2499. this.setNextStatement(true, null);
  2500. this.setColour("#ee783a");
  2501. this.setTooltip('');
  2502. this.setHelpUrl('');
  2503. }
  2504. };
  2505. Blockly.Python.ai_model_animalrecognition = function(block) {
  2506. var variable_name = Blockly.Python.variableDB_.getName(block.getFieldValue('varitem'), Blockly.Variables.NAME_TYPE);
  2507. var _code = "code_animalrecognition = kpu.run_yolo2(task_animalrecognition, " + variable_name + ")\n"
  2508. return _code;
  2509. }
  2510. Blockly.Blocks['ai_model_aanimalrecognition'] = {
  2511. init: function() {
  2512. this.appendDummyInput()
  2513. .appendField(Blockly.Msg.CAMERINITPMA_AAOID)
  2514. this.setOutput(true, null);
  2515. this.setColour("#ee783a");
  2516. this.setTooltip('');
  2517. this.setHelpUrl('');
  2518. }
  2519. };
  2520. Blockly.Python.ai_model_aanimalrecognition = function(block) {
  2521. var _code = "code_animalrecognition\n"
  2522. return _code;
  2523. }
  2524. Blockly.Blocks['ai_model_ifanimalrecognition'] = {
  2525. init: function() {
  2526. this.appendDummyInput()
  2527. .appendField(Blockly.Msg.OLCD_SETROTATION)
  2528. .appendField(new Blockly.FieldDropdown([
  2529. ["0°", "1"],
  2530. ["90°", "2"],
  2531. ["180°", "3"],
  2532. ["270°", "0"]
  2533. ]), "DEGREE")
  2534. .appendField(Blockly.Msg.OLCD_SETROTATION_DEGREE)
  2535. this.setPreviousStatement(true, null);
  2536. this.setNextStatement(true, null);
  2537. this.setColour("#ee783a");
  2538. this.setTooltip('');
  2539. this.setHelpUrl('');
  2540. }
  2541. };
  2542. Blockly.Python.ai_model_ifanimalrecognition = function(block) {
  2543. // if code_animalrecognition: # if object is detected then do
  2544. // for i_animalrecognition in code_animalrecognition:
  2545. // # ...
  2546. var _code = "code_objectrecognition\n"
  2547. return _code;
  2548. }
  2549. Blockly.Blocks['ai_model_xyanimalrecognition'] = {
  2550. init: function() {
  2551. this.appendDummyInput()
  2552. .appendField(Blockly.Msg.CAMERINITPMA_FPMA)
  2553. this.appendDummyInput()
  2554. .appendField(Blockly.Msg.CAMERINITPM_G)
  2555. .appendField(new Blockly.FieldDropdown([
  2556. ["X-Coordinate", "x"],
  2557. ["Y-Coordinate", "y"],
  2558. ["Width of the Detection Box", "w"],
  2559. ["Height of the Detection Box", "h"],
  2560. ["Number of Objects Detected", "objnum"],
  2561. ["Index of Object Detected", "index"],
  2562. ["Confidence Score (%)", "value"]
  2563. ]), "DEGREE")
  2564. .appendField(Blockly.Msg.CAMERINITPMA_GIOTCAD)
  2565. this.setOutput(true, null);
  2566. this.setColour("#ee783a");
  2567. this.setTooltip('');
  2568. this.setHelpUrl('');
  2569. }
  2570. };
  2571. Blockly.Python.ai_model_xyanimalrecognition = function(block) {
  2572. var degee = block.getFieldValue('DEGREE');
  2573. var _code = "i_animalrecognition." + degee + "()\n"
  2574. return _code;
  2575. }
  2576. Blockly.Blocks['ai_model_canimalrecognition'] = {
  2577. init: function() {
  2578. this.appendDummyInput()
  2579. .appendField(Blockly.Msg.CAMERINITPMA_DAOIA)
  2580. .appendField(new Blockly.FieldDropdown([
  2581. ["Bird", "Bird"],
  2582. ["Cat", "Cat"],
  2583. ["Cow", "Cow"],
  2584. ["Dog", "Dog"],
  2585. ["Horse", "Horse"],
  2586. ["Sheep", "Sheep"]
  2587. ]), "DEGREE")
  2588. this.setOutput(true, null);
  2589. this.setColour("#ee783a");
  2590. this.setTooltip('');
  2591. this.setHelpUrl('');
  2592. }
  2593. };
  2594. Blockly.Python.ai_model_canimalrecognition = function(block) {
  2595. var degee = block.getFieldValue('DEGREE');
  2596. var _code = "classes_animalrecognition[i.classid()]\n"
  2597. return _code;
  2598. }
  2599. Blockly.Blocks['ai_model_facerecognition'] = {
  2600. init: function() {
  2601. this.appendDummyInput()
  2602. .appendField(Blockly.Msg.CAMERINITPMF)
  2603. this.appendDummyInput()
  2604. .appendField(Blockly.Msg.CAMERINITPMF_SISFIF)
  2605. .appendField(new Blockly.FieldVariable("img_facerecognition"), "varitem");
  2606. this.setPreviousStatement(true, null);
  2607. this.setNextStatement(true, null);
  2608. this.setColour("#ee783a");
  2609. this.setTooltip('');
  2610. this.setHelpUrl('');
  2611. }
  2612. };
  2613. Blockly.Python.ai_model_facerecognition = function(block) {
  2614. var variable_name = Blockly.Python.variableDB_.getName(block.getFieldValue('varitem'), Blockly.Variables.NAME_TYPE);
  2615. var _code = "code_facerecognition = kpu.run_yolo2(task_facerecognition, " + variable_name + ")\n"
  2616. return _code;
  2617. }
  2618. Blockly.Blocks['ai_model_afacerecognition'] = {
  2619. init: function() {
  2620. this.appendDummyInput()
  2621. .appendField(Blockly.Msg.CAMERINITPMF_AFID)
  2622. this.setOutput(true, null);
  2623. this.setColour("#ee783a");
  2624. this.setTooltip('');
  2625. this.setHelpUrl('');
  2626. }
  2627. };
  2628. Blockly.Python.ai_model_afacerecognition = function(block) {
  2629. var _code = "code_facerecognition\n"
  2630. return _code;
  2631. }
  2632. Blockly.Blocks['ai_model_iffacerecognition'] = {
  2633. init: function() {
  2634. this.appendDummyInput()
  2635. .appendField(Blockly.Msg.OLCD_SETROTATION)
  2636. .appendField(new Blockly.FieldDropdown([
  2637. ["0°", "1"],
  2638. ["90°", "2"],
  2639. ["180°", "3"],
  2640. ["270°", "0"]
  2641. ]), "DEGREE")
  2642. .appendField(Blockly.Msg.OLCD_SETROTATION_DEGREE)
  2643. this.setPreviousStatement(true, null);
  2644. this.setNextStatement(true, null);
  2645. this.setColour("#ee783a");
  2646. this.setTooltip('');
  2647. this.setHelpUrl('');
  2648. }
  2649. };
  2650. Blockly.Python.ai_model_iffacerecognition = function(block) {
  2651. // if code_facerecognition: # if face is detected then do
  2652. // for i_facerecognition in code_facerecognition:
  2653. // # ...
  2654. var _code = "code_objectrecognition\n"
  2655. return _code;
  2656. }
  2657. Blockly.Blocks['ai_model_xyfacerecognition'] = {
  2658. init: function() {
  2659. this.appendDummyInput()
  2660. .appendField(Blockly.Msg.CAMERINITPMF_FPM)
  2661. this.appendDummyInput()
  2662. .appendField(Blockly.Msg.CAMERINITPM_G)
  2663. .appendField(new Blockly.FieldDropdown([
  2664. ["X-Coordinate", "x"],
  2665. ["Y-Coordinate", "y"],
  2666. ["Width of the Detection Box", "w"],
  2667. ["Height of the Detection Box", "h"],
  2668. ["Number of Objects Detected", "objnum"],
  2669. ["Index of Object Detected", "index"],
  2670. ["Confidence Score (%)", "value"]
  2671. ]), "DEGREE")
  2672. .appendField(Blockly.Msg.CAMERINITPMF_GIOTFD)
  2673. this.setOutput(true, null);
  2674. this.setColour("#ee783a");
  2675. this.setTooltip('');
  2676. this.setHelpUrl('');
  2677. }
  2678. };
  2679. Blockly.Python.ai_model_xyfacerecognition = function(block) {
  2680. var degee = block.getFieldValue('DEGREE');
  2681. var _code = "i_facerecognition." + degee + "()\n"
  2682. return _code;
  2683. }
  2684. Blockly.Blocks['ai_model_kpuload'] = {
  2685. init: function() {
  2686. this.appendDummyInput()
  2687. .appendField(Blockly.Msg.CAMERINITPMF_LCMLM);
  2688. this.appendDummyInput()
  2689. .appendField(Blockly.Msg.CAMERINITPMF_FSC)
  2690. .appendField(new Blockly.FieldTextInput("/sd/models/facedetect.kmodel"), "input")
  2691. this.setOutput(true, null);
  2692. this.setColour("#ee783a");
  2693. this.setTooltip('');
  2694. this.setHelpUrl('');
  2695. }
  2696. };
  2697. Blockly.Python.ai_model_kpuload = function(block) {
  2698. var input = block.getFieldValue('input');
  2699. Blockly.Python.definitions_.import_KPU = "import KPU as kpu";
  2700. var _code = "kpu.load(\"" + input + "\")\n"
  2701. return _code;
  2702. }
  2703. Blockly.Blocks['ai_model_inityolo2'] = {
  2704. init: function() {
  2705. this.appendDummyInput()
  2706. .appendField(Blockly.Msg.CAMERINIINNYFNOT)
  2707. .appendField(Blockly.Msg.CAMERINIINNYFNOT_F)
  2708. .appendField(new Blockly.FieldVariable("task"), "varitem");
  2709. this.appendDummyInput()
  2710. .appendField(Blockly.Msg.CAMERINIINNYFNOT_SPT)
  2711. .appendField(new Blockly.FieldTextInput("0"), "input")
  2712. .appendField(Blockly.Msg.CAMERINIINNYFNOT_SPT_S)
  2713. .appendField(new Blockly.FieldTextInput("0"), "input1");
  2714. this.appendDummyInput()
  2715. .appendField(Blockly.Msg.CAMERINITPMF_SNOAA)
  2716. .appendField(new Blockly.FieldTextInput("5"), "input2")
  2717. .appendField(Blockly.Msg.CAMERINITPMF_SNOAA_S)
  2718. .appendField(new Blockly.FieldVariable("anchor"), "varitem1");
  2719. this.setPreviousStatement(true, null);
  2720. this.setNextStatement(true, null);
  2721. this.setColour("#ee783a");
  2722. this.setTooltip('');
  2723. this.setHelpUrl('');
  2724. }
  2725. };
  2726. Blockly.Python.ai_model_inityolo2 = function(block) {
  2727. var varitem = block.getFieldValue('varitem');
  2728. var varitem1 = block.getFieldValue('varitem1');
  2729. var input = block.getFieldValue('input');
  2730. var input1 = block.getFieldValue('input1');
  2731. var input2 = block.getFieldValue('input2');
  2732. var _code = "kpu.init_yolo2(" + varitem + ", " + input + ", " + input1 + ", " + input2 + ", " + varitem1 + ")\n"
  2733. return _code;
  2734. }
  2735. Blockly.Blocks['ai_model_runyolo2'] = {
  2736. init: function() {
  2737. this.appendDummyInput()
  2738. .appendField(Blockly.Msg.CAMERGRFRNNY);
  2739. this.appendDummyInput()
  2740. .appendField(Blockly.Msg.CAMERGRFRNNY_FNOT)
  2741. .appendField(new Blockly.FieldVariable("task"), "varitem");
  2742. this.appendDummyInput()
  2743. .appendField(Blockly.Msg.CAMERGRFRNNY_SISA)
  2744. .appendField(new Blockly.FieldVariable("camera"), "varitem1");
  2745. this.setOutput(true, null);
  2746. this.setColour("#ee783a");
  2747. this.setTooltip('');
  2748. this.setHelpUrl('');
  2749. }
  2750. };
  2751. Blockly.Python.ai_model_runyolo2 = function(block) {
  2752. var varitem = block.getFieldValue('varitem');
  2753. var varitem1 = block.getFieldValue('varitem1');
  2754. var _code = "kpu.run_yolo2(" + varitem + ", " + varitem1 + ")\n"
  2755. return _code;
  2756. }
  2757. Blockly.Blocks['ai_model_forward'] = {
  2758. init: function() {
  2759. this.appendDummyInput()
  2760. .appendField(Blockly.Msg.CAMERGFMOFNOT)
  2761. .appendField(new Blockly.FieldVariable("task"), "varitem")
  2762. this.appendDummyInput()
  2763. .appendField(Blockly.Msg.CAMERGFMOFNOT_SISAC)
  2764. .appendField(new Blockly.FieldTextInput("3"), "input")
  2765. this.appendDummyInput()
  2766. .appendField(Blockly.Msg.CAMERGFMOFNOT_SISAC)
  2767. .appendField(new Blockly.FieldVariable("task"), "varitem1")
  2768. this.setOutput(true, null);
  2769. this.setColour("#ee783a");
  2770. this.setTooltip('');
  2771. this.setHelpUrl('');
  2772. }
  2773. };
  2774. Blockly.Python.ai_model_forward = function(block) {
  2775. var variable_name = Blockly.Python.variableDB_.getName(block.getFieldValue('varitem'), Blockly.Variables.NAME_TYPE);
  2776. var variable_name1 = Blockly.Python.variableDB_.getName(block.getFieldValue('varitem1'), Blockly.Variables.NAME_TYPE);
  2777. var input = block.getFieldValue('input');
  2778. var _code = "kpu.forward(" + variable_name + "," + variable_name1 + "," + input + ")\n"
  2779. return _code;
  2780. }
  2781. Blockly.Blocks['ai_model_deinit'] = {
  2782. init: function() {
  2783. this.appendDummyInput()
  2784. .appendField(Blockly.Msg.CAMERDNOT)
  2785. .appendField(new Blockly.FieldVariable("task"), "varitem")
  2786. .appendField(Blockly.Msg.OLCD_SETROTATION_DEGREE)
  2787. this.setPreviousStatement(true, null);
  2788. this.setNextStatement(true, null);
  2789. this.setColour("#ee783a");
  2790. this.setTooltip('');
  2791. this.setHelpUrl('');
  2792. }
  2793. };
  2794. Blockly.Python.ai_model_deinit = function(block) {
  2795. var variable_name = Blockly.Python.variableDB_.getName(block.getFieldValue('varitem'), Blockly.Variables.NAME_TYPE);
  2796. var _code = "kpu.deinit(" + variable_name + ")\n"
  2797. return _code;
  2798. }
  2799. Blockly.Blocks['ai_vision_if'] = {
  2800. init: function() {
  2801. this.appendDummyInput()
  2802. .appendField(Blockly.Msg.VISION_IF)
  2803. .appendField(new Blockly.FieldDropdown([
  2804. ["Red", "fcr_threshold_red"],
  2805. ["Green", "fcr_threshold_green"],
  2806. ["Blue", "fcr_threshold_blue"]
  2807. ]), "color")
  2808. .appendField(Blockly.Msg.VISION_IF_R)
  2809. .appendField(new Blockly.FieldVariable("img"), "varitem");
  2810. this.appendDummyInput()
  2811. .appendField(Blockly.Msg.VISION_IF_S)
  2812. .appendField(new Blockly.FieldTextInput("60"), "input")
  2813. .appendField(Blockly.Msg.HID_MOUSE_MOVE_DISTANCE);
  2814. this.appendStatementInput('DO0')
  2815. .appendField(Blockly.Msg.TOUCH_DO);
  2816. this.setPreviousStatement(true);
  2817. this.setNextStatement(true);
  2818. this.setColour("#f2a247");
  2819. }
  2820. };
  2821. Blockly.Python.ai_vision_if = function(block) {
  2822. var input = block.getFieldValue('input');
  2823. var varitem = block.getFieldValue('varitem');
  2824. var color = block.getFieldValue('color');
  2825. Blockly.Python.addVariable('fcr_threshold_red', 'fcr_threshold_red = (30, 100, 15, 127, 15, 127)', true);
  2826. Blockly.Python.addVariable('fcr_threshold_green', 'fcr_threshold_green = (30, 100, -64, -8, -32, 32)', true);
  2827. Blockly.Python.addVariable('fcr_threshold_blue', 'fcr_threshold_blue = (45, 65, -20, 30, -60, -20)', true);
  2828. Blockly.Python.addVariable('fcr_current_threshold', 'fcr_current_threshold = ' + color, true);
  2829. Blockly.Python.addVariable('fcr_max_region_size_detected', 'fcr_max_region_size_detected = ' + input, true);
  2830. var _code = "fcr_blobs = " + varitem + ".find_blobs([fcr_current_threshold], area_threshold=150)\n"
  2831. _code += " if fcr_blobs: \n"
  2832. _code += " for b in fcr_blobs:\n"
  2833. _code += " if (b[2] > fcr_max_region_size_detected) or ((b[3] > fcr_max_region_size_detected)):\n"
  2834. _code += " " + varitem + ".draw_rectangle(b[0:4])\n"
  2835. _code += " " + varitem + ".draw_cross(b[5], b[6])\n"
  2836. _code += " " + varitem + ".draw_rectangle(b[0], b[1]-20, b[2], 20, color=(255,255,255), fill=True)\n"
  2837. _code += " " + varitem + ".draw_string(b[0]+2, b[1]-20+2, \"x:\"+ str(b[0]) + \", y:\"+ str(b[1]), mono_space=False, color=(0,0,0), scale=2)\n"
  2838. return _code;
  2839. }
  2840. Blockly.Blocks['ai_vision_gd'] = {
  2841. init: function() {
  2842. this.appendDummyInput()
  2843. .appendField(Blockly.Msg.VISION_IF_C)
  2844. .appendField(new Blockly.FieldDropdown([
  2845. ["X Coordinate", "0"],
  2846. ["Y Coordinate", "1"],
  2847. ["Width", "2"],
  2848. ["Height", "3"],
  2849. ]), "dropdown");
  2850. this.setOutput(true, null);
  2851. this.setColour("#f2a247");
  2852. this.setTooltip("");
  2853. this.setHelpUrl("");
  2854. }
  2855. };
  2856. Blockly.Python.ai_vision_gd = function(block) {
  2857. var d = block.getFieldValue('dropdown');
  2858. var _code = "b[" + d + "]\n"
  2859. return _code;
  2860. }
  2861. Blockly.Blocks['ai_vision_dif'] = {
  2862. init: function() {
  2863. this.appendDummyInput()
  2864. .appendField(Blockly.Msg.CONTROLS_IF_MSG_IF)
  2865. .appendField(new Blockly.FieldDropdown([
  2866. ["Red", "fcr_threshold_red"],
  2867. ["Green", "fcr_threshold_green"],
  2868. ["Blue", "fcr_threshold_blue"]
  2869. ]), "color")
  2870. .appendField(Blockly.Msg.VISION_CIF)
  2871. .appendField(new Blockly.FieldVariable("img"), "varitem");
  2872. this.appendStatementInput('DO0')
  2873. .appendField(Blockly.Msg.TOUCH_DO);
  2874. this.setPreviousStatement(true);
  2875. this.setNextStatement(true);
  2876. this.setColour("#f2a247");
  2877. }
  2878. };
  2879. Blockly.Python.ai_vision_dif = function(block) {
  2880. var color = block.getFieldValue('color');
  2881. var varitem = block.getFieldValue('varitem');
  2882. Blockly.Python.addVariable('fc_threshold_red', 'fc_threshold_red = (30, 100, 15, 127, 15, 127)', true);
  2883. Blockly.Python.addVariable('fc_threshold_green', 'fc_threshold_green = (30, 100, -64, -8, -32, 32)', true);
  2884. Blockly.Python.addVariable('fc_threshold_blue', 'fc_threshold_blue = (45, 65, -20, 30, -60, -20)', true);
  2885. Blockly.Python.addVariable('fc_color_threshold', 'fc_color_threshold = ' + color, true);
  2886. Blockly.Python.addVariable('fc_bounding_box_color', 'fc_bounding_box_color = (200,200,200)', true);
  2887. var _code = "def fc_expand_roi(roi):\n"
  2888. _code += " extra = 5\n"
  2889. _code += " win_size = (224, 224)\n"
  2890. _code += " (x, y, width, height) = roi\n"
  2891. _code += " fc_new_roi = [x-extra, y-extra, width+2*extra, height+2*extra]\n"
  2892. _code += "\n"
  2893. _code += " if fc_new_roi[0] < 0:\n"
  2894. _code += " fc_new_roi[0] = 0\n"
  2895. _code += " if fc_new_roi[1] < 0:\n"
  2896. _code += " fc_new_roi[1] = 0\n"
  2897. _code += " if fc_new_roi[2] > win_size[0]:\n"
  2898. _code += " fc_new_roi[2] = win_size[0]\n"
  2899. _code += " if fc_new_roi[3] > win_size[1]:\n"
  2900. _code += " fc_new_roi[3] = win_size[1]\n"
  2901. _code += "\n"
  2902. _code += " return tuple(fc_new_roi)\n"
  2903. Blockly.Python.addFunction("fc_expand_roi", _code);
  2904. _code = "fc_blobs = " + varitem + ".find_blobs([fc_color_threshold], area_threshold=150)\n"
  2905. " if fc_blobs:\n"
  2906. " for fc_blob in fc_blobs:\n"
  2907. " fc_is_circle = False\n"
  2908. " fc_max_circle = None\n"
  2909. " fc_max_radius = -1\n"
  2910. " fc_new_roi = fc_expand_roi(fc_blob.rect())\n"
  2911. "\n"
  2912. " for fc_c in " + varitem + ".find_circles(threshold = 2000, x_margin = 20, y_margin = 20, r_margin = 10, roi=fc_new_roi):\n"
  2913. " fc_is_circle = True\n"
  2914. " # " + varitem + ".draw_circle(c.x(), c.y(), c.r(), color = (255, 255, 255))\n"
  2915. " if fc_c.r() > fc_max_radius:\n"
  2916. " fc_max_radius = fc_c.r()\n"
  2917. " fc_max_circle = fc_c\n"
  2918. " if fc_is_circle:\n"
  2919. " " + varitem + ".draw_rectangle(fc_new_roi, thickness=1)\n"
  2920. " " + varitem + ".draw_rectangle(fc_new_roi[0], fc_new_roi[1]-20, fc_new_roi[2], 20, color=(255,255,255), fill=True)\n"
  2921. " " + varitem + ".draw_string(fc_new_roi[0]+2, fc_new_roi[1]-20+2, \"x:\"+ str(fc_new_roi[0]) + \", y:\"+ str(fc_new_roi[1]), mono_space=False, color=(0,0,0), scale=2)\n"
  2922. " " + varitem + ".draw_cross(fc_blob[5], fc_blob[6])\n"
  2923. " " + varitem + ".draw_circle(fc_max_circle.x(), fc_max_circle.y(), fc_max_circle.r(), color = fc_bounding_box_color)\n"
  2924. " " + varitem + ".draw_circle(fc_max_circle.x(), fc_max_circle.y(), fc_max_circle.r() + 1, color = fc_bounding_box_color)\n"
  2925. return _code;
  2926. }
  2927. Blockly.Blocks['ai_vision_dgd'] = {
  2928. init: function() {
  2929. this.appendDummyInput()
  2930. .appendField(Blockly.Msg.VISION_CIF_D)
  2931. .appendField(new Blockly.FieldDropdown([
  2932. ["X Coordinate", "0"],
  2933. ["Y Coordinate", "1"],
  2934. ["Width", "2"],
  2935. ["Height", "3"],
  2936. ]), "dropdown");
  2937. this.setOutput(true, null);
  2938. this.setColour("#f2a247");
  2939. this.setTooltip("");
  2940. this.setHelpUrl("");
  2941. }
  2942. };
  2943. Blockly.Python.ai_vision_dgd = function(block) {
  2944. var n = block.getFieldValue('dropdown');
  2945. var _code = "fc_new_roi[" + n + "]\n"
  2946. return _code;
  2947. }
  2948. Blockly.Blocks['ai_vision_sif'] = {
  2949. init: function() {
  2950. this.appendDummyInput()
  2951. .appendField(Blockly.Msg.VISION_SIF);
  2952. this.appendDummyInput()
  2953. .appendField(Blockly.Msg.VISION_SIF_D)
  2954. .appendField(new Blockly.FieldDropdown([
  2955. ["Black", "DETECT_SINGLE_BLACK_LINE"],
  2956. ["White", "DETECT_SINGLE_WHITE_LINE"]
  2957. ]), "color")
  2958. this.appendStatementInput('DO0')
  2959. .appendField(Blockly.Msg.TOUCH_DO);
  2960. this.setPreviousStatement(true);
  2961. this.setNextStatement(true);
  2962. this.setColour("#f2a247");
  2963. }
  2964. };
  2965. Blockly.Python.ai_vision_sif = function(block) {
  2966. var color = block.getFieldValue('color');
  2967. Blockly.Python.addVariable('ROI', "ROI = (0, 92, 224, 40)", true);
  2968. Blockly.Python.addVariable('DETECT_SINGLE_BLACK_LINE', "[(0, 40)]", true);
  2969. Blockly.Python.addVariable('DETECT_SINGLE_WHITE_LINE', "[(128, 255)]", true);
  2970. Blockly.Python.addVariable('GRAYSCALE_THRESHOLD', "ROI = " + color, true);
  2971. var _code = "def get_blob_value(blob):\n";
  2972. _code += " return blob.w()\n";
  2973. Blockly.Python.addFunction("get_blob_value", _code);
  2974. _code = "def compare_blob(blob1, blob2):\n"
  2975. _code += " comp_result = get_blob_value(blob1) - get_blob_value(blob2)\n"
  2976. _code += " if comp_result > 3:\n"
  2977. _code += " return 1\n"
  2978. _code += " elif comp_result < -3:\n"
  2979. _code += " return -1\n"
  2980. _code += " else:\n"
  2981. _code += " return 0\n"
  2982. Blockly.Python.addFunction("compare_blob", _code);
  2983. _code = "def get_direction(left_blob, right_blob):\n"
  2984. _code += " MAX_WIDTH = 224\n"
  2985. _code += " theta = 0.01\n"
  2986. _code += " b = 3\n"
  2987. _code += " x1 = left_blob.x() - int(0.5 * left_blob.w())\n"
  2988. _code += " x2 = right_blob.x() + int(0.5 * right_blob.w())\n"
  2989. _code += " w_left = x1\n"
  2990. _code += " w_center = math.fabs(x2 - x1)\n"
  2991. _code += " w_right = math.fabs(MAX_WIDTH - x2)\n"
  2992. _code += " direct_ratio = (w_left + b + theta * w_center) / (w_left + w_right + 2 * b + 2 * theta * w_center) - 0.5\n"
  2993. _code += " return direct_ratio\n"
  2994. Blockly.Python.addFunction("get_direction", _code);
  2995. _code = "def get_top2_blobs(blobs):\n"
  2996. _code += " for blob in blobs:\n"
  2997. _code += " pass\n"
  2998. _code += " #print(blob)\n"
  2999. _code += " # img.draw_rectangle(blob.rect())\n"
  3000. _code += " if len(blobs) < 2:\n"
  3001. _code += " return (None, None)\n"
  3002. _code += " top_blob1 = blobs[0]\n"
  3003. _code += " top_blob2 = blobs[1]\n"
  3004. _code += " if compare_blob(top_blob1, top_blob2) == -1:\n"
  3005. _code += " top_blob1, top_blob2 = top_blob2, top_blob1\n"
  3006. _code += " for i in range(2, len(blobs)):\n"
  3007. _code += " if compare_blob(blobs[i], top_blob1) == 1:\n"
  3008. _code += " top_blob2 = top_blob1\n"
  3009. _code += " top_blob1 = blobs[i]\n"
  3010. _code += " elif compare_blob(blobs[i], top_blob2) == 1:\n"
  3011. _code += " top_blob2 = blobs[i]\n"
  3012. _code += " if top_blob1.cx() > top_blob2.cx():\n"
  3013. _code += " return (top_blob2, top_blob1)\n"
  3014. _code += " else:\n"
  3015. _code += " return (top_blob1, top_blob2)\n"
  3016. Blockly.Python.addFunction("get_top2_blobs", _code);
  3017. _code = "def draw_direct(img, direct_ratio):\n"
  3018. _code += " img.draw_circle(112, 112, 5)\n"
  3019. _code += " img.draw_line((112, 112, int(112 + direct_ratio * 20), 112))\n"
  3020. Blockly.Python.addFunction("draw_direct", _code);
  3021. // # b 積木主體代碼
  3022. _code = "img = sensor.snapshot()";
  3023. _code += "blobs = img.find_blobs(GRAYSCALE_THRESHOLD, roi = ROI, merge = True)";
  3024. _code += "if blobs:\n"
  3025. _code += " left_blob, right_blob = get_top2_blobs(blobs)\n"
  3026. _code += " if(left_blob == None or right_blob == None):\n"
  3027. _code += " print(\"Out Of Range\")\n"
  3028. _code += " lcd.display(img, oft=(8,8))\n"
  3029. _code += " continue\n"
  3030. _code += " else:\n"
  3031. _code += " print(\"left blob\")\n"
  3032. _code += " print(left_blob)\n"
  3033. _code += " print(\"right blob\")\n"
  3034. _code += " print(right_blob)\n"
  3035. _code += " img.draw_circle(left_blob.cx(), left_blob.cy(), 3, thickness=2)\n"
  3036. _code += " img.draw_circle(right_blob.cx(), right_blob.cy(), 3, thickness=2)\n"
  3037. _code += " img.draw_line(left_blob.cx(), left_blob.cy(), right_blob.cx(), right_blob.cy(), thickness=2)\n"
  3038. _code += " direct_ratio = get_direction(left_blob, right_blob)\n"
  3039. _code += " img.draw_string(10, 33, \"%.2f\"%direct_ratio, mono_space=False)\n"
  3040. _code += " rect_color = (0,0,255)\n"
  3041. _code += " arrow_color = (255,255,255)\n"
  3042. _code += " if float(direct_ratio) < -0.1:\n"
  3043. _code += " img.draw_string(10, 10, \"Turn Left\", scale=2, mono_space=False)\n"
  3044. _code += " img.draw_rectangle(174,10,40,40,color=rect_color,fill=True)\n"
  3045. _code += " img.draw_arrow(207, 30,180, 30, color=arrow_color, thickness=3)\n"
  3046. _code += " elif float(direct_ratio) > 0.1:\n"
  3047. _code += " img.draw_string(10, 10, \"Turn Right\", scale=2, mono_space=False)\n"
  3048. _code += " img.draw_rectangle(174,10,40,40,color=rect_color,fill=True)\n"
  3049. _code += " img.draw_arrow(180, 30, 207, 30, color=arrow_color, thickness=3)\n"
  3050. _code += " elif int(direct_ratio) == 0:\n"
  3051. _code += " img.draw_string(10, 10, \"Go Straight\", scale=2, mono_space=False)\n"
  3052. _code += " img.draw_rectangle(174,10,40,40,color=rect_color,fill=True)\n"
  3053. _code += " img.draw_arrow(194, 40, 194, 20, color=arrow_color, thickness=3)\n"
  3054. _code += " # 將條件積木中放置的代碼放在此處...\n"
  3055. return _code;
  3056. }
  3057. Blockly.Blocks['ai_vision_sgd'] = {
  3058. init: function() {
  3059. this.appendDummyInput()
  3060. .appendField(Blockly.Msg.VISION_SIF_G);
  3061. this.appendDummyInput()
  3062. .appendField(Blockly.Msg.VISION_SIF_GF);
  3063. this.setOutput(true, null);
  3064. this.setColour("#f2a247");
  3065. this.setTooltip("");
  3066. this.setHelpUrl("");
  3067. }
  3068. };
  3069. Blockly.Python.ai_vision_sgd = function(block) {
  3070. var _code = "direct_ratio\n"
  3071. return _code;
  3072. }
  3073. */
  3074. /*
  3075. _ ___ ____ _
  3076. / \ |_ _| / ___| _ _ ___| |_ ___ _ __ ___
  3077. / _ \ | | \___ \| | | / __| __/ _ \ '_ ` _ \
  3078. / ___ \ | | ___) | |_| \__ \ || __/ | | | | |
  3079. /_/ \_\___| |____/ \__, |___/\__\___|_| |_| |_|
  3080. |___/
  3081. */
  3082. Blockly.Blocks['ai_system_restart'] = {
  3083. init: function init() {
  3084. this.appendDummyInput().appendField(Blockly.Msg.ai_system_restart);
  3085. this.setPreviousStatement(true);
  3086. this.setNextStatement(true);
  3087. this.setColour("#d42b03");
  3088. this.setTooltip("");
  3089. this.setHelpUrl("");
  3090. }
  3091. };
  3092. Blockly.Python.ai_system_restart = function (block) {
  3093. Blockly.Python.definitions_.import_machine = "import machine";
  3094. var _code = "machine.reset()\n";
  3095. return _code;
  3096. };
  3097. Blockly.Blocks['ai_system_gc'] = {
  3098. init: function init() {
  3099. this.appendDummyInput().appendField(Blockly.Msg.ai_system_enable_gc);
  3100. this.setInputsInline(false);
  3101. this.setPreviousStatement(true, null);
  3102. this.setNextStatement(true, null);
  3103. this.setColour("#d42b03");
  3104. this.setTooltip("");
  3105. this.setHelpUrl("");
  3106. }
  3107. };
  3108. Blockly.Python.ai_system_gc = function (block) {
  3109. Blockly.Python.definitions_.import_gc = "import gc";
  3110. Blockly.Python.addSetup("ai_system_gc", "gc.enable()");
  3111. var _code = "gc.collect()\n";
  3112. return _code;
  3113. };
  3114. Blockly.Blocks['ai_system_run'] = {
  3115. init: function init() {
  3116. this.appendDummyInput().appendField(Blockly.Msg.ai_system_run_python_code);
  3117. this.appendValueInput("PATH").setCheck(null).appendField(Blockly.Msg.ai_system_run_python_code_file_path);
  3118. this.setInputsInline(false);
  3119. this.setPreviousStatement(true, null);
  3120. this.setNextStatement(true, null);
  3121. this.setColour("#d42b03");
  3122. this.setTooltip("");
  3123. this.setHelpUrl("");
  3124. }
  3125. };
  3126. Blockly.Python.ai_system_run = function (block) {
  3127. var _path = Blockly.Python.valueToCode(block, 'PATH', Blockly.Python.ORDER_ATOMIC);
  3128. var _code = "exec(open(" + _path + ").read())\n";
  3129. return _code;
  3130. };
  3131. Blockly.Blocks['ai_system_create'] = {
  3132. init: function init() {
  3133. this.appendDummyInput().appendField(Blockly.Msg.SYSTEM_CREATE);
  3134. this.appendValueInput("PATH").setCheck(null).appendField(Blockly.Msg.SYSTEM_CREATE_F);
  3135. this.setInputsInline(false);
  3136. this.setPreviousStatement(true, null);
  3137. this.setNextStatement(true, null);
  3138. this.setColour("#1e3283");
  3139. this.setTooltip("");
  3140. this.setHelpUrl("");
  3141. }
  3142. };
  3143. Blockly.Python.ai_system_create = function (block) {
  3144. var _path = Blockly.Python.valueToCode(block, 'PATH', Blockly.Python.ORDER_ATOMIC);
  3145. var _code = "def _CREATE_TEXT_FILE(_path):\n";
  3146. _code += " f = open(_path, 'w')\n";
  3147. _code += " f.close()\n";
  3148. Blockly.Python.addFunction("_CREATE_TEXT_FILE", _code);
  3149. _code = "_CREATE_TEXT_FILE(" + _path + ")\n";
  3150. return _code;
  3151. };
  3152. Blockly.Blocks['ai_system_write'] = {
  3153. init: function init() {
  3154. this.appendDummyInput().appendField(Blockly.Msg.SYSTEM_WRITE);
  3155. this.appendValueInput("PATH").setCheck(null).appendField(Blockly.Msg.SYSTEM_WRITE_F);
  3156. this.appendValueInput("WPATH").setCheck(null).appendField(Blockly.Msg.SYSTEM_WRITE_W);
  3157. this.appendDummyInput().appendField(Blockly.Msg.SYSTEM_WRITE_S).appendField(new Blockly.FieldDropdown([[Blockly.Msg.SYSTEM_WRITE_S_N, "newline"], [Blockly.Msg.SYSTEM_WRITE_S_C, "comma"], [Blockly.Msg.SYSTEM_WRITE_S_S, "space"], [Blockly.Msg.SYSTEM_WRITE_S_SE, "semicolon"]]), "separator");
  3158. this.setInputsInline(false);
  3159. this.setPreviousStatement(true, null);
  3160. this.setNextStatement(true, null);
  3161. this.setColour("#1e3283");
  3162. this.setTooltip("");
  3163. this.setHelpUrl("");
  3164. }
  3165. };
  3166. Blockly.Python.ai_system_write = function (block) {
  3167. var _path = Blockly.Python.valueToCode(block, 'PATH', Blockly.Python.ORDER_ATOMIC);
  3168. var _wpath = Blockly.Python.valueToCode(block, 'WPATH', Blockly.Python.ORDER_ATOMIC);
  3169. var _separator = block.getFieldValue('separator');
  3170. var _code = "def _CREATE_TEXT_FILE_WITH_CONTENT(_path, _data, _sep):\n";
  3171. _code += " f = open(_path, 'a')\n";
  3172. _code += " f.write(_data + _sep)\n";
  3173. _code += " f.close()\n";
  3174. Blockly.Python.addFunction("_CREATE_TEXT_FILE_WITH_CONTENT", _code);
  3175. _code = "_CREATE_TEXT_FILE_WITH_CONTENT(" + _path + ", " + _wpath + ", '\\r\\n')";
  3176. if (_separator == "newline") {
  3177. _code = "_CREATE_TEXT_FILE_WITH_CONTENT(" + _path + ", " + _wpath + ", '\\r\\n')";
  3178. } else if (_separator == "comma") {
  3179. _code = "_CREATE_TEXT_FILE_WITH_CONTENT(" + _path + ", " + _wpath + ", ',')";
  3180. } else if (_separator == "space") {
  3181. _code = "_CREATE_TEXT_FILE_WITH_CONTENT(" + _path + ", " + _wpath + ", ' ')";
  3182. } else if (_separator == "semicolon") {
  3183. _code = "_CREATE_TEXT_FILE_WITH_CONTENT(" + _path + ", " + _wpath + ", ';')";
  3184. }
  3185. return _code;
  3186. };
  3187. Blockly.Blocks['ai_system_input'] = {
  3188. init: function init() {
  3189. this.appendDummyInput().appendField(Blockly.Msg.SYSTEM_INPUT);
  3190. this.appendValueInput("PATH").setCheck(null).appendField(Blockly.Msg.SYSTEM_WRITE_F);
  3191. this.appendDummyInput().appendField(Blockly.Msg.SYSTEM_WRITE_S).appendField(new Blockly.FieldDropdown([[Blockly.Msg.SYSTEM_WRITE_S_N, "newline"], [Blockly.Msg.SYSTEM_WRITE_S_C, "comma"], [Blockly.Msg.SYSTEM_WRITE_S_S, "space"], [Blockly.Msg.SYSTEM_WRITE_S_SE, "semicolon"]]), "separator");
  3192. this.setInputsInline(false);
  3193. this.setPreviousStatement(true, null);
  3194. this.setNextStatement(true, null);
  3195. this.setColour("#1e3283");
  3196. this.setTooltip("");
  3197. this.setHelpUrl("");
  3198. }
  3199. };
  3200. Blockly.Python.ai_system_input = function (block) {
  3201. var _path = Blockly.Python.valueToCode(block, 'PATH', Blockly.Python.ORDER_ATOMIC);
  3202. var _separator = block.getFieldValue('separator');
  3203. var _code = "def _GET_LIST_FROM_FILE(_path, _sep):\n";
  3204. _code += " f = open(_path, 'r')\n";
  3205. _code += " result = f.read().split(_sep)\n";
  3206. _code += " f.close()\n";
  3207. _code += " return result\n";
  3208. Blockly.Python.addFunction("_GET_LIST_FROM_FILE", _code);
  3209. _code = "_GET_LIST_FROM_FILE(" + _path + ", '\\r\\n')";
  3210. if (_separator == "newline") {
  3211. _code = "_GET_LIST_FROM_FILE(" + _path + ", '\\r\\n')";
  3212. } else if (_separator == "comma") {
  3213. _code = "_GET_LIST_FROM_FILE(" + _path + ", ',')";
  3214. } else if (_separator == "space") {
  3215. _code = "_GET_LIST_FROM_FILE(" + _path + ", ' ')";
  3216. } else if (_separator == "semicolon") {
  3217. _code = "_GET_LIST_FROM_FILE(" + _path + ", ';')";
  3218. }
  3219. return _code;
  3220. };
  3221. /*
  3222. Blockly.Blocks['ai_serialport_print'] = {
  3223. init: function() {
  3224. this.jsonInit({
  3225. message0: Blockly.Msg.SERIALPORT_PRINT_TITLE,
  3226. args0: [{
  3227. type: "input_value",
  3228. name: "TEXT"
  3229. }],
  3230. previousStatement: null,
  3231. nextStatement: null,
  3232. colour: 65,
  3233. tooltip: Blockly.Msg.TEXT_PRINT_TOOLTIP,
  3234. helpUrl: Blockly.Msg.TEXT_PRINT_HELPURL
  3235. })
  3236. }
  3237. };
  3238. Blockly.Python.ai_serialport_print = function(block) {
  3239. return "print(" + (Blockly.Python.valueToCode(block, "TEXT", Blockly.Python.ORDER_NONE) || "''") + ")\n";
  3240. }
  3241. Blockly.Blocks['ai_serialport_printall'] = {
  3242. init: function() {
  3243. this.appendDummyInput()
  3244. .appendField(Blockly.Msg.SERIALPORT_PRINT_TITLE);
  3245. this.appendDummyInput()
  3246. .appendField(Blockly.Msg.SERIALPORT_SPACER)
  3247. .appendField(new Blockly.FieldCheckbox("TRUE"), "spacer");
  3248. this.appendDummyInput()
  3249. .appendField(Blockly.Msg.SERIALPORT_TERMINATOR)
  3250. .appendField(new Blockly.FieldCheckbox("TRUE"), "terminator");
  3251. this.appendValueInput("data1")
  3252. .setCheck("String")
  3253. .appendField(Blockly.Msg.SERIALPORT_DATA + "1");
  3254. this.appendValueInput("data2")
  3255. .setCheck(null)
  3256. .appendField(Blockly.Msg.SERIALPORT_DATA + "2");
  3257. this.setPreviousStatement(true, null);
  3258. this.setNextStatement(true, null);
  3259. this.setColour(65);
  3260. this.setTooltip("");
  3261. this.setHelpUrl("");
  3262. }
  3263. };
  3264. Blockly.Python.ai_serialport_printall = function(block) {
  3265. var spacer = block.getFieldValue('spacer') == 'TRUE' ? "True" : "False";
  3266. var terminator = block.getFieldValue('terminator') == 'TRUE' ? "True" : "False";;
  3267. var data1 = Blockly.Python.valueToCode(block, 'data1', Blockly.Python.ORDER_ATOMIC);
  3268. var data2 = Blockly.Python.valueToCode(block, 'data2', Blockly.Python.ORDER_ATOMIC);
  3269. var _code = "print(" + data1 + ", " + data2 + ", sep='" + spacer + "', end='" + terminator + "') \n"
  3270. return _code;
  3271. }
  3272. */