ai.dev.js 171 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840
  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("path").setCheck(null).appendField(Blockly.Msg.ai_audio_play_music_file_set_file_path);
  1883. this.setPreviousStatement(true, null);
  1884. this.setNextStatement(true, null);
  1885. this.setColour("#5f7fc1");
  1886. this.setTooltip("");
  1887. this.setHelpUrl("");
  1888. }
  1889. };
  1890. Blockly.Python['ai_audio_play_song_speaker'] = function (block) {
  1891. var number_play_vol = block.getFieldValue('play_vol');
  1892. var value_name = Blockly.Python.valueToCode(block, 'path', Blockly.Python.ORDER_ATOMIC);
  1893. 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;
  1894. Blockly.Python.addVariable('_audio_play_state', _in, true); // Blockly.Python.addSetup("ai_audio_read", _in);
  1895. var _code = "_speaker_play_song(path=" + value_name + ", volume=" + number_play_vol + ")\n";
  1896. return _code;
  1897. };
  1898. Blockly.Blocks['ai_audio_play_state_speaker'] = {
  1899. init: function init() {
  1900. this.appendDummyInput().appendField(Blockly.Msg.ai_audio_get_play_status);
  1901. this.setOutput(true, null);
  1902. this.setColour("#5f7fc1");
  1903. this.setTooltip("");
  1904. this.setHelpUrl("");
  1905. }
  1906. };
  1907. Blockly.Python['ai_audio_play_state_speaker'] = function (block) {
  1908. // TODO: Assemble Python into code variable.
  1909. var code = '_audio_play_state'; // TODO: Change ORDER_NONE to the correct strength.
  1910. return [code, Blockly.Python.ORDER_NONE];
  1911. };
  1912. Blockly.Blocks['ai_audio_play_finish_speaker'] = {
  1913. init: function init() {
  1914. this.appendDummyInput().appendField(Blockly.Msg.ai_audio_end_play);
  1915. this.setPreviousStatement(true, null);
  1916. this.setNextStatement(true, null);
  1917. this.setColour("#5f7fc1");
  1918. this.setTooltip("");
  1919. this.setHelpUrl("");
  1920. }
  1921. };
  1922. Blockly.Python['ai_audio_play_finish_speaker'] = function (block) {
  1923. // TODO: Assemble Python into code variable.
  1924. var code = '_player.finish()\n';
  1925. return code;
  1926. };
  1927. Blockly.Blocks['ai_audio_set_speaker'] = {
  1928. init: function init() {
  1929. this.appendValueInput("Num").setCheck(null).appendField(Blockly.Msg.ai_audio_set_music_vol);
  1930. this.setInputsInline(true);
  1931. this.setPreviousStatement(true, null);
  1932. this.setNextStatement(true, null);
  1933. this.setColour("#5f7fc1");
  1934. this.setTooltip("");
  1935. this.setHelpUrl("");
  1936. }
  1937. };
  1938. Blockly.Python.ai_audio_set_speaker = function (block) {
  1939. var _num = Blockly.Python.valueToCode(block, 'Num', Blockly.Python.ORDER_ATOMIC);
  1940. var _code = "_player.volume(" + _num + ")\n";
  1941. return _code;
  1942. };
  1943. /*
  1944. _ ___ __ ___ _
  1945. / \ |_ _| \ \ / (_) __| | ___ ___
  1946. / _ \ | | \ \ / /| |/ _` |/ _ \/ _ \
  1947. / ___ \ | | \ V / | | (_| | __/ (_) |
  1948. /_/ \_\___| \_/ |_|\__,_|\___|\___/
  1949. */
  1950. Blockly.Blocks['ai_video_record_setup'] = {
  1951. init: function init() {
  1952. this.appendDummyInput().appendField(new Blockly.FieldImage("blockly/media/video_record_init_header.png", 45, 45, {
  1953. alt: "*",
  1954. flipRtl: "FALSE"
  1955. }));
  1956. this.appendDummyInput().appendField(Blockly.Msg.ai_video_start_recording);
  1957. this.appendValueInput("save_path").setCheck(null).appendField(Blockly.Msg.ai_video_start_recording_file_path);
  1958. this.appendValueInput("w").setCheck(null).appendField(Blockly.Msg.ai_video_start_recording_width);
  1959. this.appendValueInput("h").setCheck(null).appendField(Blockly.Msg.ai_video_start_recording_height);
  1960. this.setPreviousStatement(true, null);
  1961. this.setNextStatement(true, null);
  1962. this.setColour("#60c1bb");
  1963. this.setTooltip("");
  1964. this.setHelpUrl("");
  1965. }
  1966. };
  1967. Blockly.Python['ai_video_record_setup'] = function (block) {
  1968. var value_save_path = Blockly.Python.valueToCode(block, 'save_path', Blockly.Python.ORDER_ATOMIC);
  1969. var value_w = Blockly.Python.valueToCode(block, 'w', Blockly.Python.ORDER_ATOMIC);
  1970. var value_h = Blockly.Python.valueToCode(block, 'h', Blockly.Python.ORDER_ATOMIC);
  1971. Blockly.Python.definitions_.import_video = "import video";
  1972. Blockly.Python.definitions_.import_Maix = "from Maix import GPIO";
  1973. Blockly.Python.addVariable('record_vid', 'record_vid = None', true); // TODO: Assemble Python into code variable.
  1974. var code = "_record_vid = video.open(" + value_save_path + ", record=1, width=" + value_w + ", height=" + value_h + ", interval=20000, quality=80)\n";
  1975. return code;
  1976. };
  1977. Blockly.Blocks['ai_video_get'] = {
  1978. init: function init() {
  1979. this.appendDummyInput().appendField(Blockly.Msg.ai_video_to_canvas).appendField(new Blockly.FieldVariable("canvas"), "varitem").appendField(Blockly.Msg.ai_video_record);
  1980. this.setInputsInline(false);
  1981. this.setPreviousStatement(true, null);
  1982. this.setNextStatement(true, null);
  1983. this.setColour("#60c1bb");
  1984. this.setTooltip("");
  1985. this.setHelpUrl("");
  1986. }
  1987. };
  1988. Blockly.Python.ai_video_get = function (block) {
  1989. var variable_name = Blockly.Python.variableDB_.getName(block.getFieldValue('varitem'), Blockly.Variables.NAME_TYPE);
  1990. var _code = "_record_vid.record(" + variable_name + ")\n";
  1991. return _code;
  1992. };
  1993. Blockly.Blocks['ai_video_stop'] = {
  1994. init: function init() {
  1995. this.appendDummyInput().appendField(Blockly.Msg.ai_video_stop_recording);
  1996. this.setPreviousStatement(true);
  1997. this.setNextStatement(true);
  1998. this.setColour("#60c1bb");
  1999. this.setTooltip("");
  2000. this.setHelpUrl("");
  2001. }
  2002. };
  2003. Blockly.Python.ai_video_stop = function (block) {
  2004. var _code = "_record_vid.record_finish()\n";
  2005. return _code;
  2006. };
  2007. Blockly.Blocks['ai_video_set'] = {
  2008. init: function init() {
  2009. this.appendDummyInput().appendField(new Blockly.FieldImage("blockly/media/video_init_header.png", 45, 45, {
  2010. alt: "*",
  2011. flipRtl: "FALSE"
  2012. }));
  2013. this.appendDummyInput().appendField(Blockly.Msg.ai_video_play_video);
  2014. this.appendDummyInput().appendField(Blockly.Msg.ai_video_play_video_2);
  2015. this.appendValueInput("path").setCheck(null).appendField(Blockly.Msg.ai_video_play_video_file_path);
  2016. this.setPreviousStatement(true, null);
  2017. this.setNextStatement(true, null);
  2018. this.setColour("#4d9994");
  2019. this.setTooltip("");
  2020. this.setHelpUrl("");
  2021. }
  2022. };
  2023. Blockly.Python['ai_video_set'] = function (block) {
  2024. Blockly.Python.definitions_.import_video = "import video";
  2025. Blockly.Python.definitions_.import_Maix = "from Maix import GPIO";
  2026. Blockly.Python.addVariable('_video_play', '', true);
  2027. var value_path = Blockly.Python.valueToCode(block, 'path', Blockly.Python.ORDER_ATOMIC);
  2028. var code = '_video_play = video.open(' + value_path + ')\n';
  2029. return code;
  2030. };
  2031. Blockly.Blocks['ai_video_stop_play'] = {
  2032. init: function init() {
  2033. this.appendDummyInput().appendField(Blockly.Msg.ai_video_stop_video_playing);
  2034. this.setPreviousStatement(true, null);
  2035. this.setNextStatement(true, null);
  2036. this.setColour("#4d9994");
  2037. this.setTooltip("");
  2038. this.setHelpUrl("");
  2039. }
  2040. };
  2041. Blockly.Python['ai_video_stop_play'] = function (block) {
  2042. // TODO: Assemble Python into code variable.
  2043. var code = '_video_play.__del__()\n';
  2044. return code;
  2045. };
  2046. Blockly.Blocks['ai_video_status'] = {
  2047. init: function init() {
  2048. this.appendDummyInput().appendField(Blockly.Msg.ai_video_get_video_playing_status);
  2049. this.setOutput(true, null);
  2050. this.setColour("#4d9994");
  2051. this.setTooltip("");
  2052. this.setHelpUrl("");
  2053. }
  2054. };
  2055. Blockly.Python.ai_video_status = function (block) {
  2056. var code = "_video_play.play()";
  2057. return [code, Blockly.Python.ORDER_NONE];
  2058. };
  2059. /*
  2060. _ ___ __ __ _ _
  2061. / \ |_ _| | \/ | ___ __| | ___| |___
  2062. / _ \ | | | |\/| |/ _ \ / _` |/ _ \ / __|
  2063. / ___ \ | | | | | | (_) | (_| | __/ \__ \
  2064. /_/ \_\___| |_| |_|\___/ \__,_|\___|_|___/
  2065. */
  2066. Blockly.Blocks['ai_model_allinit'] = {
  2067. init: function init() {
  2068. 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");
  2069. this.appendDummyInput().appendField(Blockly.Msg.ai_models_init_source).appendField(new Blockly.FieldVariable("img_mnist"), "varitem");
  2070. this.setPreviousStatement(true, null);
  2071. this.setNextStatement(true, null);
  2072. this.setColour("#ee783a");
  2073. this.setTooltip('');
  2074. this.setHelpUrl('');
  2075. }
  2076. };
  2077. Blockly.Python.ai_model_allinit = function (block) {
  2078. var variable_name = Blockly.Python.variableDB_.getName(block.getFieldValue('varitem'), Blockly.Variables.NAME_TYPE);
  2079. Blockly.Python.definitions_.import_KPU = "import KPU as kpu";
  2080. var degee = block.getFieldValue('DEGREE');
  2081. var _code = "";
  2082. if (degee == "Single Digit Recognition") {
  2083. Blockly.Python.addVariable('task_mnist', "task_mnist = kpu.load(\"/sd/preset/models/mnist.kmodel\")\n", true); // Blockly.Python.addVariable('img_mnist1', '', true);
  2084. // Blockly.Python.addVariable('img_mnist_resized', '', true);
  2085. _code += "img_mnist1=img_mnist.to_grayscale(1)\n";
  2086. _code += "img_mnist_resized=img_mnist1.resize(28,28)\n";
  2087. _code += "a=img_mnist_resized.invert()\n";
  2088. _code += "a=img_mnist_resized.strech_char(1)\n";
  2089. _code += "a=img_mnist_resized.pix_to_ai()\n";
  2090. _code += "fmap_mnist=kpu.forward(task_mnist, " + variable_name + ")\n";
  2091. _code += "plist_mnist=fmap_mnist[:]\n";
  2092. _code += "pmax_mnist=max(plist_mnist)\n";
  2093. _code += "max_index_mnist=plist_mnist.index(pmax_mnist)\n";
  2094. } else if (degee == "Common Object Recognition") {
  2095. Blockly.Python.addVariable('task_objectrecognition', '', true);
  2096. 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);
  2097. _code += "code_objectrecognition = kpu.run_yolo2(task_objectrecognition, " + variable_name + ")\n";
  2098. _code += variable_name + ".ai_to_pix()\n";
  2099. } else {
  2100. Blockly.Python.addVariable('task_facerecognition', '', true); // Blockly.Python.addVariable('task_facerecognition', '', true);
  2101. 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);
  2102. _code += "code_facerecognition = kpu.run_yolo2(task_facerecognition, " + variable_name + ")\n";
  2103. _code += variable_name + ".ai_to_pix()\n";
  2104. }
  2105. return _code;
  2106. };
  2107. Blockly.Blocks['ai_model_index_mnist'] = {
  2108. init: function init() {
  2109. this.appendDummyInput().appendField(new Blockly.FieldImage("blockly/media/digit_recognition_header.png", 45, 45, {
  2110. alt: "*",
  2111. flipRtl: "FALSE"
  2112. }));
  2113. this.appendDummyInput().appendField(Blockly.Msg.ai_models_hand_written_model_result);
  2114. 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");
  2115. this.setOutput(true, null);
  2116. this.setColour("#ee783a");
  2117. this.setTooltip('');
  2118. this.setHelpUrl('');
  2119. }
  2120. };
  2121. Blockly.Python.ai_model_index_mnist = function (block) {
  2122. var value = block.getFieldValue('value');
  2123. var _code = "max_index_mnist";
  2124. if (value == "confidence") {
  2125. _code = "int(pmax_mnist*100)";
  2126. }
  2127. return [_code, Blockly.Python.ORDER_ATOMIC];
  2128. };
  2129. Blockly.Blocks['ai_model_look'] = {
  2130. init: function init() {
  2131. this.appendDummyInput().appendField(Blockly.Msg.ai_models_object_model_if);
  2132. this.setInputsInline(false);
  2133. this.setOutput(true, null);
  2134. this.setColour("#ee783a");
  2135. this.setTooltip("");
  2136. this.setHelpUrl("");
  2137. }
  2138. };
  2139. Blockly.Python.ai_model_look = function (block) {
  2140. var _code = "code_objectrecognition";
  2141. return [_code, Blockly.Python.ORDER_ATOMIC];
  2142. };
  2143. Blockly.Blocks['ai_model_get'] = {
  2144. init: function init() {
  2145. this.appendDummyInput().appendField(new Blockly.FieldImage("blockly/media/object_recognition_header.png", 45, 45, {
  2146. alt: "*",
  2147. flipRtl: "FALSE"
  2148. }));
  2149. 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");
  2150. this.setInputsInline(false);
  2151. this.setOutput(true, null);
  2152. this.setColour("#ee783a");
  2153. this.setTooltip("");
  2154. this.setHelpUrl("");
  2155. }
  2156. };
  2157. Blockly.Python.ai_model_get = function (block) {
  2158. var type = block.getFieldValue('TYPE');
  2159. var variable_name = Blockly.Python.variableDB_.getName(block.getFieldValue('varitem'), Blockly.Variables.NAME_TYPE);
  2160. var _code = "";
  2161. if (type == "Object") {
  2162. _code = "classes_objectrecognition[" + variable_name + ".classid()]";
  2163. } else if (type == "X") {
  2164. _code = variable_name + ".x()";
  2165. } else if (type == "Y") {
  2166. _code = variable_name + ".y()";
  2167. } else if (type == "W") {
  2168. _code = variable_name + ".w()";
  2169. } else if (type == "H") {
  2170. _code = variable_name + ".h()";
  2171. } else if (type == "Number") {
  2172. _code = variable_name + ".objnum()";
  2173. } else if (type == "Serial") {
  2174. _code = variable_name + ".index()";
  2175. } else if (type == "Confidence") {
  2176. _code = variable_name + ".value()";
  2177. }
  2178. return [_code, Blockly.Python.ORDER_ATOMIC];
  2179. };
  2180. Blockly.Blocks['ai_model_face'] = {
  2181. init: function init() {
  2182. this.appendDummyInput().appendField(Blockly.Msg.ai_models_face_model_if);
  2183. this.setInputsInline(false);
  2184. this.setOutput(true, null);
  2185. this.setColour("#ee783a");
  2186. this.setTooltip("");
  2187. this.setHelpUrl("");
  2188. }
  2189. };
  2190. Blockly.Python.ai_model_face = function (block) {
  2191. var _code = "code_facerecognition";
  2192. return [_code, Blockly.Python.ORDER_ATOMIC];
  2193. };
  2194. Blockly.Blocks['ai_model_xy'] = {
  2195. init: function init() {
  2196. this.appendDummyInput().appendField(new Blockly.FieldImage("blockly/media/face_recognition_header.png", 45, 45, {
  2197. alt: "*",
  2198. flipRtl: "FALSE"
  2199. }));
  2200. 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");
  2201. this.setInputsInline(false);
  2202. this.setOutput(true, null);
  2203. this.setColour("#ee783a");
  2204. this.setTooltip("");
  2205. this.setHelpUrl("");
  2206. }
  2207. };
  2208. Blockly.Python.ai_model_xy = function (block) {
  2209. var type = block.getFieldValue('TYPE');
  2210. var variable_name = Blockly.Python.variableDB_.getName(block.getFieldValue('varitem'), Blockly.Variables.NAME_TYPE);
  2211. var _code = "";
  2212. if (type == "X") {
  2213. _code = variable_name + ".x()";
  2214. } else if (type == "Y") {
  2215. _code = variable_name + ".y()";
  2216. } else if (type == "W") {
  2217. _code = variable_name + ".w()";
  2218. } else if (type == "H") {
  2219. _code = variable_name + ".h()";
  2220. } else if (type == "Number") {
  2221. _code = variable_name + ".objnum()";
  2222. } else if (type == "Serial") {
  2223. _code = variable_name + ".index()";
  2224. } else if (type == "Confidence") {
  2225. _code = variable_name + ".value()";
  2226. }
  2227. return [_code, Blockly.Python.ORDER_ATOMIC];
  2228. };
  2229. Blockly.Blocks['ai_model_customized_init_setup'] = {
  2230. init: function init() {
  2231. this.appendDummyInput().appendField(Blockly.Msg.ai_models_customized_init_setup_title);
  2232. this.appendDummyInput().appendField(Blockly.Msg.ai_models_customized_init_setup_path).appendField(new Blockly.FieldTextInput("/sd/user/mymodel.kmodel"), "model_path");
  2233. this.appendDummyInput().appendField(Blockly.Msg.ai_models_customized_init_setup_source).appendField(new Blockly.FieldVariable("camera"), "varitem");
  2234. this.appendValueInput("class_input").setCheck(null).appendField(Blockly.Msg.ai_models_customized_init_setup_name);
  2235. this.setPreviousStatement(true, null);
  2236. this.setNextStatement(true, null);
  2237. this.setColour("#ee783a");
  2238. this.setTooltip("");
  2239. this.setHelpUrl("");
  2240. }
  2241. };
  2242. Blockly.Python['ai_model_customized_init_setup'] = function (block) {
  2243. var value_class_input = Blockly.Python.valueToCode(block, 'class_input', Blockly.Python.ORDER_ATOMIC);
  2244. var variable_name = Blockly.Python.variableDB_.getName(block.getFieldValue('varitem'), Blockly.Variables.NAME_TYPE);
  2245. var text_model_path = block.getFieldValue('model_path');
  2246. Blockly.Python.definitions_.import_KPU_customized = "import KPU as kpu";
  2247. 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);
  2248. Blockly.Python.addVariable('classes_customized_model', '' + 'classes_customized_model = ' + value_class_input + '\n' + '', true);
  2249. var code = 'code_customized_model = kpu.run_yolo2(task_customized_model, ' + variable_name + ')\n';
  2250. return code;
  2251. };
  2252. Blockly.Blocks['ai_model_customized_if_got'] = {
  2253. init: function init() {
  2254. this.appendDummyInput().appendField(Blockly.Msg.ai_models_customized_if_got);
  2255. this.setOutput(true, null);
  2256. this.setColour("#ee783a");
  2257. this.setTooltip("");
  2258. this.setHelpUrl("");
  2259. }
  2260. };
  2261. Blockly.Python['ai_model_customized_if_got'] = function (block) {
  2262. // TODO: Assemble Python into code variable.
  2263. var code = 'code_customized_model'; // TODO: Change ORDER_NONE to the correct strength.
  2264. return [code, Blockly.Python.ORDER_NONE];
  2265. };
  2266. Blockly.Blocks['ai_model_customized_get_result'] = {
  2267. init: function init() {
  2268. 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");
  2269. this.setOutput(true, null);
  2270. this.setColour("#ee783a");
  2271. this.setTooltip("");
  2272. this.setHelpUrl("");
  2273. }
  2274. };
  2275. Blockly.Python['ai_model_customized_get_result'] = function (block) {
  2276. var variable_name = Blockly.Python.variableDB_.getName(block.getFieldValue('varitem'), Blockly.Variables.NAME_TYPE);
  2277. var dropdown_get_results = block.getFieldValue('get_results'); // TODO: Assemble Python into code variable.
  2278. if (dropdown_get_results == "classid") {
  2279. var code = 'classes_customized_model[' + variable_name + '.classid()]';
  2280. } else {
  2281. var code = variable_name + '.' + dropdown_get_results + '()';
  2282. } // TODO: Change ORDER_NONE to the correct strength.
  2283. return [code, Blockly.Python.ORDER_NONE];
  2284. };
  2285. /*
  2286. Blockly.Blocks['ai_model_init'] = {
  2287. init: function() {
  2288. this.appendDummyInput()
  2289. .appendField(Blockly.Msg.MODELLPM)
  2290. .appendField(new Blockly.FieldDropdown([
  2291. ["Single Digit Recognition", "Single Digit Recognition"],
  2292. ["Common Object Recognition", "Common Object Recognition"],
  2293. ["Animal Recognition", "Animal Recognition"],
  2294. ["Human Face Recognition", "Human Face Recognition"]
  2295. ]), "DEGREE")
  2296. this.setPreviousStatement(true, null);
  2297. this.setNextStatement(true, null);
  2298. this.setColour("#ee783a");
  2299. this.setTooltip('');
  2300. this.setHelpUrl('');
  2301. }
  2302. };
  2303. Blockly.Python.ai_model_init = function(block) {
  2304. Blockly.Python.definitions_.import_KPU = "import KPU as kpu";
  2305. var degee = block.getFieldValue('DEGREE');
  2306. var _code = ""
  2307. if (degee == "Single Digit Recognition") {
  2308. _code += "task_mnist = kpu.load(\"/sd/models/mnist.kmodel\")\n";
  2309. } else if (degee == "Common Object Recognition") {
  2310. _code += "classes_animalrecognition = ['aeroplane', 'bicycle', '', 'boat', 'bottle', 'bus', 'car', '', 'chair', '', 'diningtable', '', '', 'motorbike', 'person', 'pottedplant', '', 'sofa', 'train', 'tvmonitor']\n";
  2311. _code += "task_animalrecognition = kpu.load(\"/sd/models/object-recognition.kmodel\")\n";
  2312. _code += "anchor_animalrecognition = (1.08, 1.19, 3.42, 4.41, 6.63, 11.38, 9.42, 5.11, 16.62, 10.52)\n";
  2313. _code += "a = kpu.init_yolo2(task_animalrecognition, 0.5, 0.3, 5, anchor_animalrecognition)\n";
  2314. } else if (degee == "Animal Recognition") {
  2315. _code += "classes_animalrecognition = ['', '', 'bird', '', '', '', '', 'cat', '', 'cow', '', 'dog', 'horse', '', '', '', 'sheep', '', '', '']\n";
  2316. _code += "task_animalrecognition = kpu.load(\"/sd/models/animal-recognition.kmodel\")\n";
  2317. _code += "anchor_animalrecognition = (1.08, 1.19, 3.42, 4.41, 6.63, 11.38, 9.42, 5.11, 16.62, 10.52)\n";
  2318. _code += "a = kpu.init_yolo2(task_animalrecognition, 0.5, 0.3, 5, anchor_animalrecognition)\n";
  2319. } else {
  2320. _code += "task_facerecognition = kpu.load(\"/sd/models/face-recognition.kmodel\")\n";
  2321. _code += "anchor = (1.889, 2.5245, 2.9465, 3.94056, 3.99987, 5.3658, 5.155437, 6.92275, 6.718375, 9.01025)\n";
  2322. _code += "a = kpu.init_yolo2(task_facerecognition, 0.5, 0.3, 5, anchor)\n";
  2323. }
  2324. return _code;
  2325. }
  2326. Blockly.Blocks['ai_model_img_mnist'] = {
  2327. init: function() {
  2328. this.appendDummyInput()
  2329. .appendField(Blockly.Msg.CAMERINIT);
  2330. this.appendDummyInput()
  2331. .appendField(Blockly.Msg.CAMERINIT_SISF)
  2332. .appendField(new Blockly.FieldVariable("img_mnist"), "varitem");
  2333. this.setPreviousStatement(true, null);
  2334. this.setNextStatement(true, null);
  2335. this.setColour("#ee783a");
  2336. this.setTooltip('');
  2337. this.setHelpUrl('');
  2338. }
  2339. };
  2340. Blockly.Python.ai_model_img_mnist = function(block) {
  2341. var variable_name = Blockly.Python.variableDB_.getName(block.getFieldValue('varitem'), Blockly.Variables.NAME_TYPE);
  2342. var _code = "img_mnist1=" + variable_name + ".to_grayscale(1)\n"
  2343. _code += "img_mnist2=img_mnist1.resize(28,28)\n"
  2344. _code += "a=img_mnist2.invert()\n"
  2345. _code += "a=img_mnist2.strech_char(1)\n"
  2346. _code += "a=img_mnist2.pix_to_ai()\n"
  2347. _code += "fmap_mnist=kpu.forward(task_mnist,img_mnist2)\n"
  2348. _code += "plist_mnist=fmap_mnist[:]\n"
  2349. _code += "pmax_mnist=max(plist_mnist)\n"
  2350. _code += "max_index_mnist=plist_mnist.index(pmax_mnist)\n"
  2351. return _code;
  2352. }
  2353. */
  2354. /*
  2355. Blockly.Blocks['ai_model_pmax_mnist'] = {
  2356. init: function() {
  2357. this.appendDummyInput()
  2358. .appendField(Blockly.Msg.CAMERINIT_FPM)
  2359. this.appendDummyInput()
  2360. .appendField(Blockly.Msg.CAMERINIT_GTCS)
  2361. this.setOutput(true, null);
  2362. this.setColour("#ee783a");
  2363. this.setTooltip('');
  2364. this.setHelpUrl('');
  2365. }
  2366. };
  2367. Blockly.Python.ai_model_pmax_mnist = function(block) {
  2368. var _code = "int(pmax_mnist*100)\n"
  2369. return _code;
  2370. }
  2371. Blockly.Blocks['ai_model_objectrecognition'] = {
  2372. init: function() {
  2373. this.appendDummyInput()
  2374. .appendField(Blockly.Msg.CAMERINITPM)
  2375. this.appendDummyInput()
  2376. .appendField(Blockly.Msg.CAMERINITPM_SMSFIOR)
  2377. .appendField(new Blockly.FieldVariable("img_objectrecognition"), "varitem");
  2378. this.setPreviousStatement(true, null);
  2379. this.setNextStatement(true, null);
  2380. this.setColour("#ee783a");
  2381. this.setTooltip('');
  2382. this.setHelpUrl('');
  2383. }
  2384. };
  2385. Blockly.Python.ai_model_objectrecognition = function(block) {
  2386. var variable_name = Blockly.Python.variableDB_.getName(block.getFieldValue('varitem'), Blockly.Variables.NAME_TYPE);
  2387. var _code = "code_objectrecognition = kpu.run_yolo2(task_objectrecognition, " + variable_name + ")\n"
  2388. return _code;
  2389. }
  2390. Blockly.Blocks['ai_model_aobjectrecognition'] = {
  2391. init: function() {
  2392. this.appendDummyInput()
  2393. .appendField(Blockly.Msg.CAMERINITPM_ACOID)
  2394. this.setOutput(true, null);
  2395. this.setColour("#ee783a");
  2396. this.setTooltip('');
  2397. this.setHelpUrl('');
  2398. }
  2399. };
  2400. Blockly.Python.ai_model_aobjectrecognition = function(block) {
  2401. var _code = "code_objectrecognition\n"
  2402. return _code;
  2403. }
  2404. Blockly.Blocks['ai_model_ifaobjectrecognition'] = {
  2405. init: function() {
  2406. this.appendDummyInput()
  2407. .appendField(Blockly.Msg.OLCD_SETROTATION)
  2408. .appendField(new Blockly.FieldDropdown([
  2409. ["0°", "1"],
  2410. ["90°", "2"],
  2411. ["180°", "3"],
  2412. ["270°", "0"]
  2413. ]), "DEGREE")
  2414. .appendField(Blockly.Msg.OLCD_SETROTATION_DEGREE)
  2415. this.setPreviousStatement(true, null);
  2416. this.setNextStatement(true, null);
  2417. this.setColour("#ee783a");
  2418. this.setTooltip('');
  2419. this.setHelpUrl('');
  2420. }
  2421. };
  2422. Blockly.Python.ai_model_ifaobjectrecognition = function(block) {
  2423. // if code_objectrecognition: # if object is detected then do
  2424. // for i_objectrecognition in code_objectrecognition:
  2425. // # ...
  2426. var _code = "code_objectrecognition\n"
  2427. return _code;
  2428. }
  2429. Blockly.Blocks['ai_model_xyobjectreocgnition'] = {
  2430. init: function() {
  2431. this.appendDummyInput()
  2432. .appendField(Blockly.Msg.CAMERINITPM_FPM)
  2433. this.appendDummyInput()
  2434. .appendField(Blockly.Msg.CAMERINITPM_G)
  2435. .appendField(new Blockly.FieldDropdown([
  2436. ["X-Coordinate", "x"],
  2437. ["Y-Coordinate", "y"],
  2438. ["Width of the Detection Box", "w"],
  2439. ["Height of the Detection Box", "h"],
  2440. ["Number of Objects Detected", "objnum"],
  2441. ["Index of Object Detected", "index"],
  2442. ["Confidence Score (%)", "value"]
  2443. ]), "DEGREE")
  2444. .appendField(Blockly.Msg.CAMERINITPM_GIOTCOD)
  2445. this.setOutput(true, null);
  2446. this.setColour("#ee783a");
  2447. this.setTooltip('');
  2448. this.setHelpUrl('');
  2449. }
  2450. };
  2451. Blockly.Python.ai_model_xyobjectreocgnition = function(block) {
  2452. var degee = block.getFieldValue('DEGREE');
  2453. var _code = "i_objectreocgnition." + degee + "()\n"
  2454. return _code;
  2455. }
  2456. Blockly.Blocks['ai_model_cobjectrecognition'] = {
  2457. init: function() {
  2458. this.appendDummyInput()
  2459. .appendField(Blockly.Msg.CAMERINITPM_DCOIA)
  2460. .appendField(new Blockly.FieldDropdown([
  2461. ["Aeroplane", "Aeroplane"],
  2462. ["Bicycle", "Bicycle"],
  2463. ["Boat", "Boat"],
  2464. ["Bus", "Bus"],
  2465. ["Car", "Car"],
  2466. ["Chair", "Chair"],
  2467. ["Dining", "Dining"],
  2468. ["Table", "Table"],
  2469. ["Motorbike", "Motorbike"],
  2470. ["Person", "Person"],
  2471. ["Potted", "Potted"],
  2472. ["Plant", "Plant"],
  2473. ["Sofa", "Sofa"],
  2474. ["Train", "Train"],
  2475. ["Monitor", "Monitor"]
  2476. ]), "DEGREE")
  2477. .appendField(Blockly.Msg.OLCD_SETROTATION_DEGREE)
  2478. this.setOutput(true, null);
  2479. this.setColour("#ee783a");
  2480. this.setTooltip('');
  2481. this.setHelpUrl('');
  2482. }
  2483. };
  2484. Blockly.Python.ai_model_cobjectrecognition = function(block) {
  2485. var degee = block.getFieldValue('DEGREE');
  2486. var _code = "classes_objectrecognition[i.classid()]\n"
  2487. return _code;
  2488. }
  2489. Blockly.Blocks['ai_model_animalrecognition'] = {
  2490. init: function() {
  2491. this.appendDummyInput()
  2492. .appendField(Blockly.Msg.CAMERINITPMA)
  2493. this.appendDummyInput()
  2494. .appendField(Blockly.Msg.CAMERINITPM_SMSFIOR)
  2495. .appendField(new Blockly.FieldVariable("img_animalrecognition"), "varitem");
  2496. this.setPreviousStatement(true, null);
  2497. this.setNextStatement(true, null);
  2498. this.setColour("#ee783a");
  2499. this.setTooltip('');
  2500. this.setHelpUrl('');
  2501. }
  2502. };
  2503. Blockly.Python.ai_model_animalrecognition = function(block) {
  2504. var variable_name = Blockly.Python.variableDB_.getName(block.getFieldValue('varitem'), Blockly.Variables.NAME_TYPE);
  2505. var _code = "code_animalrecognition = kpu.run_yolo2(task_animalrecognition, " + variable_name + ")\n"
  2506. return _code;
  2507. }
  2508. Blockly.Blocks['ai_model_aanimalrecognition'] = {
  2509. init: function() {
  2510. this.appendDummyInput()
  2511. .appendField(Blockly.Msg.CAMERINITPMA_AAOID)
  2512. this.setOutput(true, null);
  2513. this.setColour("#ee783a");
  2514. this.setTooltip('');
  2515. this.setHelpUrl('');
  2516. }
  2517. };
  2518. Blockly.Python.ai_model_aanimalrecognition = function(block) {
  2519. var _code = "code_animalrecognition\n"
  2520. return _code;
  2521. }
  2522. Blockly.Blocks['ai_model_ifanimalrecognition'] = {
  2523. init: function() {
  2524. this.appendDummyInput()
  2525. .appendField(Blockly.Msg.OLCD_SETROTATION)
  2526. .appendField(new Blockly.FieldDropdown([
  2527. ["0°", "1"],
  2528. ["90°", "2"],
  2529. ["180°", "3"],
  2530. ["270°", "0"]
  2531. ]), "DEGREE")
  2532. .appendField(Blockly.Msg.OLCD_SETROTATION_DEGREE)
  2533. this.setPreviousStatement(true, null);
  2534. this.setNextStatement(true, null);
  2535. this.setColour("#ee783a");
  2536. this.setTooltip('');
  2537. this.setHelpUrl('');
  2538. }
  2539. };
  2540. Blockly.Python.ai_model_ifanimalrecognition = function(block) {
  2541. // if code_animalrecognition: # if object is detected then do
  2542. // for i_animalrecognition in code_animalrecognition:
  2543. // # ...
  2544. var _code = "code_objectrecognition\n"
  2545. return _code;
  2546. }
  2547. Blockly.Blocks['ai_model_xyanimalrecognition'] = {
  2548. init: function() {
  2549. this.appendDummyInput()
  2550. .appendField(Blockly.Msg.CAMERINITPMA_FPMA)
  2551. this.appendDummyInput()
  2552. .appendField(Blockly.Msg.CAMERINITPM_G)
  2553. .appendField(new Blockly.FieldDropdown([
  2554. ["X-Coordinate", "x"],
  2555. ["Y-Coordinate", "y"],
  2556. ["Width of the Detection Box", "w"],
  2557. ["Height of the Detection Box", "h"],
  2558. ["Number of Objects Detected", "objnum"],
  2559. ["Index of Object Detected", "index"],
  2560. ["Confidence Score (%)", "value"]
  2561. ]), "DEGREE")
  2562. .appendField(Blockly.Msg.CAMERINITPMA_GIOTCAD)
  2563. this.setOutput(true, null);
  2564. this.setColour("#ee783a");
  2565. this.setTooltip('');
  2566. this.setHelpUrl('');
  2567. }
  2568. };
  2569. Blockly.Python.ai_model_xyanimalrecognition = function(block) {
  2570. var degee = block.getFieldValue('DEGREE');
  2571. var _code = "i_animalrecognition." + degee + "()\n"
  2572. return _code;
  2573. }
  2574. Blockly.Blocks['ai_model_canimalrecognition'] = {
  2575. init: function() {
  2576. this.appendDummyInput()
  2577. .appendField(Blockly.Msg.CAMERINITPMA_DAOIA)
  2578. .appendField(new Blockly.FieldDropdown([
  2579. ["Bird", "Bird"],
  2580. ["Cat", "Cat"],
  2581. ["Cow", "Cow"],
  2582. ["Dog", "Dog"],
  2583. ["Horse", "Horse"],
  2584. ["Sheep", "Sheep"]
  2585. ]), "DEGREE")
  2586. this.setOutput(true, null);
  2587. this.setColour("#ee783a");
  2588. this.setTooltip('');
  2589. this.setHelpUrl('');
  2590. }
  2591. };
  2592. Blockly.Python.ai_model_canimalrecognition = function(block) {
  2593. var degee = block.getFieldValue('DEGREE');
  2594. var _code = "classes_animalrecognition[i.classid()]\n"
  2595. return _code;
  2596. }
  2597. Blockly.Blocks['ai_model_facerecognition'] = {
  2598. init: function() {
  2599. this.appendDummyInput()
  2600. .appendField(Blockly.Msg.CAMERINITPMF)
  2601. this.appendDummyInput()
  2602. .appendField(Blockly.Msg.CAMERINITPMF_SISFIF)
  2603. .appendField(new Blockly.FieldVariable("img_facerecognition"), "varitem");
  2604. this.setPreviousStatement(true, null);
  2605. this.setNextStatement(true, null);
  2606. this.setColour("#ee783a");
  2607. this.setTooltip('');
  2608. this.setHelpUrl('');
  2609. }
  2610. };
  2611. Blockly.Python.ai_model_facerecognition = function(block) {
  2612. var variable_name = Blockly.Python.variableDB_.getName(block.getFieldValue('varitem'), Blockly.Variables.NAME_TYPE);
  2613. var _code = "code_facerecognition = kpu.run_yolo2(task_facerecognition, " + variable_name + ")\n"
  2614. return _code;
  2615. }
  2616. Blockly.Blocks['ai_model_afacerecognition'] = {
  2617. init: function() {
  2618. this.appendDummyInput()
  2619. .appendField(Blockly.Msg.CAMERINITPMF_AFID)
  2620. this.setOutput(true, null);
  2621. this.setColour("#ee783a");
  2622. this.setTooltip('');
  2623. this.setHelpUrl('');
  2624. }
  2625. };
  2626. Blockly.Python.ai_model_afacerecognition = function(block) {
  2627. var _code = "code_facerecognition\n"
  2628. return _code;
  2629. }
  2630. Blockly.Blocks['ai_model_iffacerecognition'] = {
  2631. init: function() {
  2632. this.appendDummyInput()
  2633. .appendField(Blockly.Msg.OLCD_SETROTATION)
  2634. .appendField(new Blockly.FieldDropdown([
  2635. ["0°", "1"],
  2636. ["90°", "2"],
  2637. ["180°", "3"],
  2638. ["270°", "0"]
  2639. ]), "DEGREE")
  2640. .appendField(Blockly.Msg.OLCD_SETROTATION_DEGREE)
  2641. this.setPreviousStatement(true, null);
  2642. this.setNextStatement(true, null);
  2643. this.setColour("#ee783a");
  2644. this.setTooltip('');
  2645. this.setHelpUrl('');
  2646. }
  2647. };
  2648. Blockly.Python.ai_model_iffacerecognition = function(block) {
  2649. // if code_facerecognition: # if face is detected then do
  2650. // for i_facerecognition in code_facerecognition:
  2651. // # ...
  2652. var _code = "code_objectrecognition\n"
  2653. return _code;
  2654. }
  2655. Blockly.Blocks['ai_model_xyfacerecognition'] = {
  2656. init: function() {
  2657. this.appendDummyInput()
  2658. .appendField(Blockly.Msg.CAMERINITPMF_FPM)
  2659. this.appendDummyInput()
  2660. .appendField(Blockly.Msg.CAMERINITPM_G)
  2661. .appendField(new Blockly.FieldDropdown([
  2662. ["X-Coordinate", "x"],
  2663. ["Y-Coordinate", "y"],
  2664. ["Width of the Detection Box", "w"],
  2665. ["Height of the Detection Box", "h"],
  2666. ["Number of Objects Detected", "objnum"],
  2667. ["Index of Object Detected", "index"],
  2668. ["Confidence Score (%)", "value"]
  2669. ]), "DEGREE")
  2670. .appendField(Blockly.Msg.CAMERINITPMF_GIOTFD)
  2671. this.setOutput(true, null);
  2672. this.setColour("#ee783a");
  2673. this.setTooltip('');
  2674. this.setHelpUrl('');
  2675. }
  2676. };
  2677. Blockly.Python.ai_model_xyfacerecognition = function(block) {
  2678. var degee = block.getFieldValue('DEGREE');
  2679. var _code = "i_facerecognition." + degee + "()\n"
  2680. return _code;
  2681. }
  2682. Blockly.Blocks['ai_model_kpuload'] = {
  2683. init: function() {
  2684. this.appendDummyInput()
  2685. .appendField(Blockly.Msg.CAMERINITPMF_LCMLM);
  2686. this.appendDummyInput()
  2687. .appendField(Blockly.Msg.CAMERINITPMF_FSC)
  2688. .appendField(new Blockly.FieldTextInput("/sd/models/facedetect.kmodel"), "input")
  2689. this.setOutput(true, null);
  2690. this.setColour("#ee783a");
  2691. this.setTooltip('');
  2692. this.setHelpUrl('');
  2693. }
  2694. };
  2695. Blockly.Python.ai_model_kpuload = function(block) {
  2696. var input = block.getFieldValue('input');
  2697. Blockly.Python.definitions_.import_KPU = "import KPU as kpu";
  2698. var _code = "kpu.load(\"" + input + "\")\n"
  2699. return _code;
  2700. }
  2701. Blockly.Blocks['ai_model_inityolo2'] = {
  2702. init: function() {
  2703. this.appendDummyInput()
  2704. .appendField(Blockly.Msg.CAMERINIINNYFNOT)
  2705. .appendField(Blockly.Msg.CAMERINIINNYFNOT_F)
  2706. .appendField(new Blockly.FieldVariable("task"), "varitem");
  2707. this.appendDummyInput()
  2708. .appendField(Blockly.Msg.CAMERINIINNYFNOT_SPT)
  2709. .appendField(new Blockly.FieldTextInput("0"), "input")
  2710. .appendField(Blockly.Msg.CAMERINIINNYFNOT_SPT_S)
  2711. .appendField(new Blockly.FieldTextInput("0"), "input1");
  2712. this.appendDummyInput()
  2713. .appendField(Blockly.Msg.CAMERINITPMF_SNOAA)
  2714. .appendField(new Blockly.FieldTextInput("5"), "input2")
  2715. .appendField(Blockly.Msg.CAMERINITPMF_SNOAA_S)
  2716. .appendField(new Blockly.FieldVariable("anchor"), "varitem1");
  2717. this.setPreviousStatement(true, null);
  2718. this.setNextStatement(true, null);
  2719. this.setColour("#ee783a");
  2720. this.setTooltip('');
  2721. this.setHelpUrl('');
  2722. }
  2723. };
  2724. Blockly.Python.ai_model_inityolo2 = function(block) {
  2725. var varitem = block.getFieldValue('varitem');
  2726. var varitem1 = block.getFieldValue('varitem1');
  2727. var input = block.getFieldValue('input');
  2728. var input1 = block.getFieldValue('input1');
  2729. var input2 = block.getFieldValue('input2');
  2730. var _code = "kpu.init_yolo2(" + varitem + ", " + input + ", " + input1 + ", " + input2 + ", " + varitem1 + ")\n"
  2731. return _code;
  2732. }
  2733. Blockly.Blocks['ai_model_runyolo2'] = {
  2734. init: function() {
  2735. this.appendDummyInput()
  2736. .appendField(Blockly.Msg.CAMERGRFRNNY);
  2737. this.appendDummyInput()
  2738. .appendField(Blockly.Msg.CAMERGRFRNNY_FNOT)
  2739. .appendField(new Blockly.FieldVariable("task"), "varitem");
  2740. this.appendDummyInput()
  2741. .appendField(Blockly.Msg.CAMERGRFRNNY_SISA)
  2742. .appendField(new Blockly.FieldVariable("camera"), "varitem1");
  2743. this.setOutput(true, null);
  2744. this.setColour("#ee783a");
  2745. this.setTooltip('');
  2746. this.setHelpUrl('');
  2747. }
  2748. };
  2749. Blockly.Python.ai_model_runyolo2 = function(block) {
  2750. var varitem = block.getFieldValue('varitem');
  2751. var varitem1 = block.getFieldValue('varitem1');
  2752. var _code = "kpu.run_yolo2(" + varitem + ", " + varitem1 + ")\n"
  2753. return _code;
  2754. }
  2755. Blockly.Blocks['ai_model_forward'] = {
  2756. init: function() {
  2757. this.appendDummyInput()
  2758. .appendField(Blockly.Msg.CAMERGFMOFNOT)
  2759. .appendField(new Blockly.FieldVariable("task"), "varitem")
  2760. this.appendDummyInput()
  2761. .appendField(Blockly.Msg.CAMERGFMOFNOT_SISAC)
  2762. .appendField(new Blockly.FieldTextInput("3"), "input")
  2763. this.appendDummyInput()
  2764. .appendField(Blockly.Msg.CAMERGFMOFNOT_SISAC)
  2765. .appendField(new Blockly.FieldVariable("task"), "varitem1")
  2766. this.setOutput(true, null);
  2767. this.setColour("#ee783a");
  2768. this.setTooltip('');
  2769. this.setHelpUrl('');
  2770. }
  2771. };
  2772. Blockly.Python.ai_model_forward = function(block) {
  2773. var variable_name = Blockly.Python.variableDB_.getName(block.getFieldValue('varitem'), Blockly.Variables.NAME_TYPE);
  2774. var variable_name1 = Blockly.Python.variableDB_.getName(block.getFieldValue('varitem1'), Blockly.Variables.NAME_TYPE);
  2775. var input = block.getFieldValue('input');
  2776. var _code = "kpu.forward(" + variable_name + "," + variable_name1 + "," + input + ")\n"
  2777. return _code;
  2778. }
  2779. Blockly.Blocks['ai_model_deinit'] = {
  2780. init: function() {
  2781. this.appendDummyInput()
  2782. .appendField(Blockly.Msg.CAMERDNOT)
  2783. .appendField(new Blockly.FieldVariable("task"), "varitem")
  2784. .appendField(Blockly.Msg.OLCD_SETROTATION_DEGREE)
  2785. this.setPreviousStatement(true, null);
  2786. this.setNextStatement(true, null);
  2787. this.setColour("#ee783a");
  2788. this.setTooltip('');
  2789. this.setHelpUrl('');
  2790. }
  2791. };
  2792. Blockly.Python.ai_model_deinit = function(block) {
  2793. var variable_name = Blockly.Python.variableDB_.getName(block.getFieldValue('varitem'), Blockly.Variables.NAME_TYPE);
  2794. var _code = "kpu.deinit(" + variable_name + ")\n"
  2795. return _code;
  2796. }
  2797. Blockly.Blocks['ai_vision_if'] = {
  2798. init: function() {
  2799. this.appendDummyInput()
  2800. .appendField(Blockly.Msg.VISION_IF)
  2801. .appendField(new Blockly.FieldDropdown([
  2802. ["Red", "fcr_threshold_red"],
  2803. ["Green", "fcr_threshold_green"],
  2804. ["Blue", "fcr_threshold_blue"]
  2805. ]), "color")
  2806. .appendField(Blockly.Msg.VISION_IF_R)
  2807. .appendField(new Blockly.FieldVariable("img"), "varitem");
  2808. this.appendDummyInput()
  2809. .appendField(Blockly.Msg.VISION_IF_S)
  2810. .appendField(new Blockly.FieldTextInput("60"), "input")
  2811. .appendField(Blockly.Msg.HID_MOUSE_MOVE_DISTANCE);
  2812. this.appendStatementInput('DO0')
  2813. .appendField(Blockly.Msg.TOUCH_DO);
  2814. this.setPreviousStatement(true);
  2815. this.setNextStatement(true);
  2816. this.setColour("#f2a247");
  2817. }
  2818. };
  2819. Blockly.Python.ai_vision_if = function(block) {
  2820. var input = block.getFieldValue('input');
  2821. var varitem = block.getFieldValue('varitem');
  2822. var color = block.getFieldValue('color');
  2823. Blockly.Python.addVariable('fcr_threshold_red', 'fcr_threshold_red = (30, 100, 15, 127, 15, 127)', true);
  2824. Blockly.Python.addVariable('fcr_threshold_green', 'fcr_threshold_green = (30, 100, -64, -8, -32, 32)', true);
  2825. Blockly.Python.addVariable('fcr_threshold_blue', 'fcr_threshold_blue = (45, 65, -20, 30, -60, -20)', true);
  2826. Blockly.Python.addVariable('fcr_current_threshold', 'fcr_current_threshold = ' + color, true);
  2827. Blockly.Python.addVariable('fcr_max_region_size_detected', 'fcr_max_region_size_detected = ' + input, true);
  2828. var _code = "fcr_blobs = " + varitem + ".find_blobs([fcr_current_threshold], area_threshold=150)\n"
  2829. _code += " if fcr_blobs: \n"
  2830. _code += " for b in fcr_blobs:\n"
  2831. _code += " if (b[2] > fcr_max_region_size_detected) or ((b[3] > fcr_max_region_size_detected)):\n"
  2832. _code += " " + varitem + ".draw_rectangle(b[0:4])\n"
  2833. _code += " " + varitem + ".draw_cross(b[5], b[6])\n"
  2834. _code += " " + varitem + ".draw_rectangle(b[0], b[1]-20, b[2], 20, color=(255,255,255), fill=True)\n"
  2835. _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"
  2836. return _code;
  2837. }
  2838. Blockly.Blocks['ai_vision_gd'] = {
  2839. init: function() {
  2840. this.appendDummyInput()
  2841. .appendField(Blockly.Msg.VISION_IF_C)
  2842. .appendField(new Blockly.FieldDropdown([
  2843. ["X Coordinate", "0"],
  2844. ["Y Coordinate", "1"],
  2845. ["Width", "2"],
  2846. ["Height", "3"],
  2847. ]), "dropdown");
  2848. this.setOutput(true, null);
  2849. this.setColour("#f2a247");
  2850. this.setTooltip("");
  2851. this.setHelpUrl("");
  2852. }
  2853. };
  2854. Blockly.Python.ai_vision_gd = function(block) {
  2855. var d = block.getFieldValue('dropdown');
  2856. var _code = "b[" + d + "]\n"
  2857. return _code;
  2858. }
  2859. Blockly.Blocks['ai_vision_dif'] = {
  2860. init: function() {
  2861. this.appendDummyInput()
  2862. .appendField(Blockly.Msg.CONTROLS_IF_MSG_IF)
  2863. .appendField(new Blockly.FieldDropdown([
  2864. ["Red", "fcr_threshold_red"],
  2865. ["Green", "fcr_threshold_green"],
  2866. ["Blue", "fcr_threshold_blue"]
  2867. ]), "color")
  2868. .appendField(Blockly.Msg.VISION_CIF)
  2869. .appendField(new Blockly.FieldVariable("img"), "varitem");
  2870. this.appendStatementInput('DO0')
  2871. .appendField(Blockly.Msg.TOUCH_DO);
  2872. this.setPreviousStatement(true);
  2873. this.setNextStatement(true);
  2874. this.setColour("#f2a247");
  2875. }
  2876. };
  2877. Blockly.Python.ai_vision_dif = function(block) {
  2878. var color = block.getFieldValue('color');
  2879. var varitem = block.getFieldValue('varitem');
  2880. Blockly.Python.addVariable('fc_threshold_red', 'fc_threshold_red = (30, 100, 15, 127, 15, 127)', true);
  2881. Blockly.Python.addVariable('fc_threshold_green', 'fc_threshold_green = (30, 100, -64, -8, -32, 32)', true);
  2882. Blockly.Python.addVariable('fc_threshold_blue', 'fc_threshold_blue = (45, 65, -20, 30, -60, -20)', true);
  2883. Blockly.Python.addVariable('fc_color_threshold', 'fc_color_threshold = ' + color, true);
  2884. Blockly.Python.addVariable('fc_bounding_box_color', 'fc_bounding_box_color = (200,200,200)', true);
  2885. var _code = "def fc_expand_roi(roi):\n"
  2886. _code += " extra = 5\n"
  2887. _code += " win_size = (224, 224)\n"
  2888. _code += " (x, y, width, height) = roi\n"
  2889. _code += " fc_new_roi = [x-extra, y-extra, width+2*extra, height+2*extra]\n"
  2890. _code += "\n"
  2891. _code += " if fc_new_roi[0] < 0:\n"
  2892. _code += " fc_new_roi[0] = 0\n"
  2893. _code += " if fc_new_roi[1] < 0:\n"
  2894. _code += " fc_new_roi[1] = 0\n"
  2895. _code += " if fc_new_roi[2] > win_size[0]:\n"
  2896. _code += " fc_new_roi[2] = win_size[0]\n"
  2897. _code += " if fc_new_roi[3] > win_size[1]:\n"
  2898. _code += " fc_new_roi[3] = win_size[1]\n"
  2899. _code += "\n"
  2900. _code += " return tuple(fc_new_roi)\n"
  2901. Blockly.Python.addFunction("fc_expand_roi", _code);
  2902. _code = "fc_blobs = " + varitem + ".find_blobs([fc_color_threshold], area_threshold=150)\n"
  2903. " if fc_blobs:\n"
  2904. " for fc_blob in fc_blobs:\n"
  2905. " fc_is_circle = False\n"
  2906. " fc_max_circle = None\n"
  2907. " fc_max_radius = -1\n"
  2908. " fc_new_roi = fc_expand_roi(fc_blob.rect())\n"
  2909. "\n"
  2910. " for fc_c in " + varitem + ".find_circles(threshold = 2000, x_margin = 20, y_margin = 20, r_margin = 10, roi=fc_new_roi):\n"
  2911. " fc_is_circle = True\n"
  2912. " # " + varitem + ".draw_circle(c.x(), c.y(), c.r(), color = (255, 255, 255))\n"
  2913. " if fc_c.r() > fc_max_radius:\n"
  2914. " fc_max_radius = fc_c.r()\n"
  2915. " fc_max_circle = fc_c\n"
  2916. " if fc_is_circle:\n"
  2917. " " + varitem + ".draw_rectangle(fc_new_roi, thickness=1)\n"
  2918. " " + varitem + ".draw_rectangle(fc_new_roi[0], fc_new_roi[1]-20, fc_new_roi[2], 20, color=(255,255,255), fill=True)\n"
  2919. " " + 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"
  2920. " " + varitem + ".draw_cross(fc_blob[5], fc_blob[6])\n"
  2921. " " + varitem + ".draw_circle(fc_max_circle.x(), fc_max_circle.y(), fc_max_circle.r(), color = fc_bounding_box_color)\n"
  2922. " " + varitem + ".draw_circle(fc_max_circle.x(), fc_max_circle.y(), fc_max_circle.r() + 1, color = fc_bounding_box_color)\n"
  2923. return _code;
  2924. }
  2925. Blockly.Blocks['ai_vision_dgd'] = {
  2926. init: function() {
  2927. this.appendDummyInput()
  2928. .appendField(Blockly.Msg.VISION_CIF_D)
  2929. .appendField(new Blockly.FieldDropdown([
  2930. ["X Coordinate", "0"],
  2931. ["Y Coordinate", "1"],
  2932. ["Width", "2"],
  2933. ["Height", "3"],
  2934. ]), "dropdown");
  2935. this.setOutput(true, null);
  2936. this.setColour("#f2a247");
  2937. this.setTooltip("");
  2938. this.setHelpUrl("");
  2939. }
  2940. };
  2941. Blockly.Python.ai_vision_dgd = function(block) {
  2942. var n = block.getFieldValue('dropdown');
  2943. var _code = "fc_new_roi[" + n + "]\n"
  2944. return _code;
  2945. }
  2946. Blockly.Blocks['ai_vision_sif'] = {
  2947. init: function() {
  2948. this.appendDummyInput()
  2949. .appendField(Blockly.Msg.VISION_SIF);
  2950. this.appendDummyInput()
  2951. .appendField(Blockly.Msg.VISION_SIF_D)
  2952. .appendField(new Blockly.FieldDropdown([
  2953. ["Black", "DETECT_SINGLE_BLACK_LINE"],
  2954. ["White", "DETECT_SINGLE_WHITE_LINE"]
  2955. ]), "color")
  2956. this.appendStatementInput('DO0')
  2957. .appendField(Blockly.Msg.TOUCH_DO);
  2958. this.setPreviousStatement(true);
  2959. this.setNextStatement(true);
  2960. this.setColour("#f2a247");
  2961. }
  2962. };
  2963. Blockly.Python.ai_vision_sif = function(block) {
  2964. var color = block.getFieldValue('color');
  2965. Blockly.Python.addVariable('ROI', "ROI = (0, 92, 224, 40)", true);
  2966. Blockly.Python.addVariable('DETECT_SINGLE_BLACK_LINE', "[(0, 40)]", true);
  2967. Blockly.Python.addVariable('DETECT_SINGLE_WHITE_LINE', "[(128, 255)]", true);
  2968. Blockly.Python.addVariable('GRAYSCALE_THRESHOLD', "ROI = " + color, true);
  2969. var _code = "def get_blob_value(blob):\n";
  2970. _code += " return blob.w()\n";
  2971. Blockly.Python.addFunction("get_blob_value", _code);
  2972. _code = "def compare_blob(blob1, blob2):\n"
  2973. _code += " comp_result = get_blob_value(blob1) - get_blob_value(blob2)\n"
  2974. _code += " if comp_result > 3:\n"
  2975. _code += " return 1\n"
  2976. _code += " elif comp_result < -3:\n"
  2977. _code += " return -1\n"
  2978. _code += " else:\n"
  2979. _code += " return 0\n"
  2980. Blockly.Python.addFunction("compare_blob", _code);
  2981. _code = "def get_direction(left_blob, right_blob):\n"
  2982. _code += " MAX_WIDTH = 224\n"
  2983. _code += " theta = 0.01\n"
  2984. _code += " b = 3\n"
  2985. _code += " x1 = left_blob.x() - int(0.5 * left_blob.w())\n"
  2986. _code += " x2 = right_blob.x() + int(0.5 * right_blob.w())\n"
  2987. _code += " w_left = x1\n"
  2988. _code += " w_center = math.fabs(x2 - x1)\n"
  2989. _code += " w_right = math.fabs(MAX_WIDTH - x2)\n"
  2990. _code += " direct_ratio = (w_left + b + theta * w_center) / (w_left + w_right + 2 * b + 2 * theta * w_center) - 0.5\n"
  2991. _code += " return direct_ratio\n"
  2992. Blockly.Python.addFunction("get_direction", _code);
  2993. _code = "def get_top2_blobs(blobs):\n"
  2994. _code += " for blob in blobs:\n"
  2995. _code += " pass\n"
  2996. _code += " #print(blob)\n"
  2997. _code += " # img.draw_rectangle(blob.rect())\n"
  2998. _code += " if len(blobs) < 2:\n"
  2999. _code += " return (None, None)\n"
  3000. _code += " top_blob1 = blobs[0]\n"
  3001. _code += " top_blob2 = blobs[1]\n"
  3002. _code += " if compare_blob(top_blob1, top_blob2) == -1:\n"
  3003. _code += " top_blob1, top_blob2 = top_blob2, top_blob1\n"
  3004. _code += " for i in range(2, len(blobs)):\n"
  3005. _code += " if compare_blob(blobs[i], top_blob1) == 1:\n"
  3006. _code += " top_blob2 = top_blob1\n"
  3007. _code += " top_blob1 = blobs[i]\n"
  3008. _code += " elif compare_blob(blobs[i], top_blob2) == 1:\n"
  3009. _code += " top_blob2 = blobs[i]\n"
  3010. _code += " if top_blob1.cx() > top_blob2.cx():\n"
  3011. _code += " return (top_blob2, top_blob1)\n"
  3012. _code += " else:\n"
  3013. _code += " return (top_blob1, top_blob2)\n"
  3014. Blockly.Python.addFunction("get_top2_blobs", _code);
  3015. _code = "def draw_direct(img, direct_ratio):\n"
  3016. _code += " img.draw_circle(112, 112, 5)\n"
  3017. _code += " img.draw_line((112, 112, int(112 + direct_ratio * 20), 112))\n"
  3018. Blockly.Python.addFunction("draw_direct", _code);
  3019. // # b 積木主體代碼
  3020. _code = "img = sensor.snapshot()";
  3021. _code += "blobs = img.find_blobs(GRAYSCALE_THRESHOLD, roi = ROI, merge = True)";
  3022. _code += "if blobs:\n"
  3023. _code += " left_blob, right_blob = get_top2_blobs(blobs)\n"
  3024. _code += " if(left_blob == None or right_blob == None):\n"
  3025. _code += " print(\"Out Of Range\")\n"
  3026. _code += " lcd.display(img, oft=(8,8))\n"
  3027. _code += " continue\n"
  3028. _code += " else:\n"
  3029. _code += " print(\"left blob\")\n"
  3030. _code += " print(left_blob)\n"
  3031. _code += " print(\"right blob\")\n"
  3032. _code += " print(right_blob)\n"
  3033. _code += " img.draw_circle(left_blob.cx(), left_blob.cy(), 3, thickness=2)\n"
  3034. _code += " img.draw_circle(right_blob.cx(), right_blob.cy(), 3, thickness=2)\n"
  3035. _code += " img.draw_line(left_blob.cx(), left_blob.cy(), right_blob.cx(), right_blob.cy(), thickness=2)\n"
  3036. _code += " direct_ratio = get_direction(left_blob, right_blob)\n"
  3037. _code += " img.draw_string(10, 33, \"%.2f\"%direct_ratio, mono_space=False)\n"
  3038. _code += " rect_color = (0,0,255)\n"
  3039. _code += " arrow_color = (255,255,255)\n"
  3040. _code += " if float(direct_ratio) < -0.1:\n"
  3041. _code += " img.draw_string(10, 10, \"Turn Left\", scale=2, mono_space=False)\n"
  3042. _code += " img.draw_rectangle(174,10,40,40,color=rect_color,fill=True)\n"
  3043. _code += " img.draw_arrow(207, 30,180, 30, color=arrow_color, thickness=3)\n"
  3044. _code += " elif float(direct_ratio) > 0.1:\n"
  3045. _code += " img.draw_string(10, 10, \"Turn Right\", scale=2, mono_space=False)\n"
  3046. _code += " img.draw_rectangle(174,10,40,40,color=rect_color,fill=True)\n"
  3047. _code += " img.draw_arrow(180, 30, 207, 30, color=arrow_color, thickness=3)\n"
  3048. _code += " elif int(direct_ratio) == 0:\n"
  3049. _code += " img.draw_string(10, 10, \"Go Straight\", scale=2, mono_space=False)\n"
  3050. _code += " img.draw_rectangle(174,10,40,40,color=rect_color,fill=True)\n"
  3051. _code += " img.draw_arrow(194, 40, 194, 20, color=arrow_color, thickness=3)\n"
  3052. _code += " # 將條件積木中放置的代碼放在此處...\n"
  3053. return _code;
  3054. }
  3055. Blockly.Blocks['ai_vision_sgd'] = {
  3056. init: function() {
  3057. this.appendDummyInput()
  3058. .appendField(Blockly.Msg.VISION_SIF_G);
  3059. this.appendDummyInput()
  3060. .appendField(Blockly.Msg.VISION_SIF_GF);
  3061. this.setOutput(true, null);
  3062. this.setColour("#f2a247");
  3063. this.setTooltip("");
  3064. this.setHelpUrl("");
  3065. }
  3066. };
  3067. Blockly.Python.ai_vision_sgd = function(block) {
  3068. var _code = "direct_ratio\n"
  3069. return _code;
  3070. }
  3071. */
  3072. /*
  3073. _ ___ ____ _
  3074. / \ |_ _| / ___| _ _ ___| |_ ___ _ __ ___
  3075. / _ \ | | \___ \| | | / __| __/ _ \ '_ ` _ \
  3076. / ___ \ | | ___) | |_| \__ \ || __/ | | | | |
  3077. /_/ \_\___| |____/ \__, |___/\__\___|_| |_| |_|
  3078. |___/
  3079. */
  3080. Blockly.Blocks['ai_system_restart'] = {
  3081. init: function init() {
  3082. this.appendDummyInput().appendField(Blockly.Msg.ai_system_restart);
  3083. this.setPreviousStatement(true);
  3084. this.setNextStatement(true);
  3085. this.setColour("#d42b03");
  3086. this.setTooltip("");
  3087. this.setHelpUrl("");
  3088. }
  3089. };
  3090. Blockly.Python.ai_system_restart = function (block) {
  3091. Blockly.Python.definitions_.import_machine = "import machine";
  3092. var _code = "machine.reset()\n";
  3093. return _code;
  3094. };
  3095. Blockly.Blocks['ai_system_gc'] = {
  3096. init: function init() {
  3097. this.appendDummyInput().appendField(Blockly.Msg.ai_system_enable_gc);
  3098. this.setInputsInline(false);
  3099. this.setPreviousStatement(true, null);
  3100. this.setNextStatement(true, null);
  3101. this.setColour("#d42b03");
  3102. this.setTooltip("");
  3103. this.setHelpUrl("");
  3104. }
  3105. };
  3106. Blockly.Python.ai_system_gc = function (block) {
  3107. Blockly.Python.definitions_.import_gc = "import gc";
  3108. Blockly.Python.addSetup("ai_system_gc", "gc.enable()");
  3109. var _code = "gc.collect()\n";
  3110. return _code;
  3111. };
  3112. Blockly.Blocks['ai_system_run'] = {
  3113. init: function init() {
  3114. this.appendDummyInput().appendField(Blockly.Msg.ai_system_run_python_code);
  3115. this.appendValueInput("PATH").setCheck(null).appendField(Blockly.Msg.ai_system_run_python_code_file_path);
  3116. this.setInputsInline(false);
  3117. this.setPreviousStatement(true, null);
  3118. this.setNextStatement(true, null);
  3119. this.setColour("#d42b03");
  3120. this.setTooltip("");
  3121. this.setHelpUrl("");
  3122. }
  3123. };
  3124. Blockly.Python.ai_system_run = function (block) {
  3125. var _path = Blockly.Python.valueToCode(block, 'PATH', Blockly.Python.ORDER_ATOMIC);
  3126. var _code = "exec(open(" + _path + ").read())\n";
  3127. return _code;
  3128. };
  3129. Blockly.Blocks['ai_system_create'] = {
  3130. init: function init() {
  3131. this.appendDummyInput().appendField(Blockly.Msg.SYSTEM_CREATE);
  3132. this.appendValueInput("PATH").setCheck(null).appendField(Blockly.Msg.SYSTEM_CREATE_F);
  3133. this.setInputsInline(false);
  3134. this.setPreviousStatement(true, null);
  3135. this.setNextStatement(true, null);
  3136. this.setColour("#1e3283");
  3137. this.setTooltip("");
  3138. this.setHelpUrl("");
  3139. }
  3140. };
  3141. Blockly.Python.ai_system_create = function (block) {
  3142. var _path = Blockly.Python.valueToCode(block, 'PATH', Blockly.Python.ORDER_ATOMIC);
  3143. var _code = "def _CREATE_TEXT_FILE(_path):\n";
  3144. _code += " f = open(_path, 'w')\n";
  3145. _code += " f.close()\n";
  3146. Blockly.Python.addFunction("_CREATE_TEXT_FILE", _code);
  3147. _code = "_CREATE_TEXT_FILE(" + _path + ")\n";
  3148. return _code;
  3149. };
  3150. Blockly.Blocks['ai_system_write'] = {
  3151. init: function init() {
  3152. this.appendDummyInput().appendField(Blockly.Msg.SYSTEM_WRITE);
  3153. this.appendValueInput("PATH").setCheck(null).appendField(Blockly.Msg.SYSTEM_WRITE_F);
  3154. this.appendValueInput("WPATH").setCheck(null).appendField(Blockly.Msg.SYSTEM_WRITE_W);
  3155. 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");
  3156. this.setInputsInline(false);
  3157. this.setPreviousStatement(true, null);
  3158. this.setNextStatement(true, null);
  3159. this.setColour("#1e3283");
  3160. this.setTooltip("");
  3161. this.setHelpUrl("");
  3162. }
  3163. };
  3164. Blockly.Python.ai_system_write = function (block) {
  3165. var _path = Blockly.Python.valueToCode(block, 'PATH', Blockly.Python.ORDER_ATOMIC);
  3166. var _wpath = Blockly.Python.valueToCode(block, 'WPATH', Blockly.Python.ORDER_ATOMIC);
  3167. var _separator = block.getFieldValue('separator');
  3168. var _code = "def _CREATE_TEXT_FILE_WITH_CONTENT(_path, _data, _sep):\n";
  3169. _code += " f = open(_path, 'a')\n";
  3170. _code += " f.write(_data + _sep)\n";
  3171. _code += " f.close()\n";
  3172. Blockly.Python.addFunction("_CREATE_TEXT_FILE_WITH_CONTENT", _code);
  3173. _code = "_CREATE_TEXT_FILE_WITH_CONTENT(" + _path + ", " + _wpath + ", '\\r\\n')";
  3174. if (_separator == "newline") {
  3175. _code = "_CREATE_TEXT_FILE_WITH_CONTENT(" + _path + ", " + _wpath + ", '\\r\\n')";
  3176. } else if (_separator == "comma") {
  3177. _code = "_CREATE_TEXT_FILE_WITH_CONTENT(" + _path + ", " + _wpath + ", ',')";
  3178. } else if (_separator == "space") {
  3179. _code = "_CREATE_TEXT_FILE_WITH_CONTENT(" + _path + ", " + _wpath + ", ' ')";
  3180. } else if (_separator == "semicolon") {
  3181. _code = "_CREATE_TEXT_FILE_WITH_CONTENT(" + _path + ", " + _wpath + ", ';')";
  3182. }
  3183. return _code;
  3184. };
  3185. Blockly.Blocks['ai_system_input'] = {
  3186. init: function init() {
  3187. this.appendDummyInput().appendField(Blockly.Msg.SYSTEM_INPUT);
  3188. this.appendValueInput("PATH").setCheck(null).appendField(Blockly.Msg.SYSTEM_WRITE_F);
  3189. 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");
  3190. this.setInputsInline(false);
  3191. this.setPreviousStatement(true, null);
  3192. this.setNextStatement(true, null);
  3193. this.setColour("#1e3283");
  3194. this.setTooltip("");
  3195. this.setHelpUrl("");
  3196. }
  3197. };
  3198. Blockly.Python.ai_system_input = function (block) {
  3199. var _path = Blockly.Python.valueToCode(block, 'PATH', Blockly.Python.ORDER_ATOMIC);
  3200. var _separator = block.getFieldValue('separator');
  3201. var _code = "def _GET_LIST_FROM_FILE(_path, _sep):\n";
  3202. _code += " f = open(_path, 'r')\n";
  3203. _code += " result = f.read().split(_sep)\n";
  3204. _code += " f.close()\n";
  3205. _code += " return result\n";
  3206. Blockly.Python.addFunction("_GET_LIST_FROM_FILE", _code);
  3207. _code = "_GET_LIST_FROM_FILE(" + _path + ", '\\r\\n')";
  3208. if (_separator == "newline") {
  3209. _code = "_GET_LIST_FROM_FILE(" + _path + ", '\\r\\n')";
  3210. } else if (_separator == "comma") {
  3211. _code = "_GET_LIST_FROM_FILE(" + _path + ", ',')";
  3212. } else if (_separator == "space") {
  3213. _code = "_GET_LIST_FROM_FILE(" + _path + ", ' ')";
  3214. } else if (_separator == "semicolon") {
  3215. _code = "_GET_LIST_FROM_FILE(" + _path + ", ';')";
  3216. }
  3217. return _code;
  3218. };
  3219. /*
  3220. Blockly.Blocks['ai_serialport_print'] = {
  3221. init: function() {
  3222. this.jsonInit({
  3223. message0: Blockly.Msg.SERIALPORT_PRINT_TITLE,
  3224. args0: [{
  3225. type: "input_value",
  3226. name: "TEXT"
  3227. }],
  3228. previousStatement: null,
  3229. nextStatement: null,
  3230. colour: 65,
  3231. tooltip: Blockly.Msg.TEXT_PRINT_TOOLTIP,
  3232. helpUrl: Blockly.Msg.TEXT_PRINT_HELPURL
  3233. })
  3234. }
  3235. };
  3236. Blockly.Python.ai_serialport_print = function(block) {
  3237. return "print(" + (Blockly.Python.valueToCode(block, "TEXT", Blockly.Python.ORDER_NONE) || "''") + ")\n";
  3238. }
  3239. Blockly.Blocks['ai_serialport_printall'] = {
  3240. init: function() {
  3241. this.appendDummyInput()
  3242. .appendField(Blockly.Msg.SERIALPORT_PRINT_TITLE);
  3243. this.appendDummyInput()
  3244. .appendField(Blockly.Msg.SERIALPORT_SPACER)
  3245. .appendField(new Blockly.FieldCheckbox("TRUE"), "spacer");
  3246. this.appendDummyInput()
  3247. .appendField(Blockly.Msg.SERIALPORT_TERMINATOR)
  3248. .appendField(new Blockly.FieldCheckbox("TRUE"), "terminator");
  3249. this.appendValueInput("data1")
  3250. .setCheck("String")
  3251. .appendField(Blockly.Msg.SERIALPORT_DATA + "1");
  3252. this.appendValueInput("data2")
  3253. .setCheck(null)
  3254. .appendField(Blockly.Msg.SERIALPORT_DATA + "2");
  3255. this.setPreviousStatement(true, null);
  3256. this.setNextStatement(true, null);
  3257. this.setColour(65);
  3258. this.setTooltip("");
  3259. this.setHelpUrl("");
  3260. }
  3261. };
  3262. Blockly.Python.ai_serialport_printall = function(block) {
  3263. var spacer = block.getFieldValue('spacer') == 'TRUE' ? "True" : "False";
  3264. var terminator = block.getFieldValue('terminator') == 'TRUE' ? "True" : "False";;
  3265. var data1 = Blockly.Python.valueToCode(block, 'data1', Blockly.Python.ORDER_ATOMIC);
  3266. var data2 = Blockly.Python.valueToCode(block, 'data2', Blockly.Python.ORDER_ATOMIC);
  3267. var _code = "print(" + data1 + ", " + data2 + ", sep='" + spacer + "', end='" + terminator + "') \n"
  3268. return _code;
  3269. }
  3270. */