diff --git a/boards/default_src/micropython/blocks/ai_local.js b/boards/default_src/micropython/blocks/ai_local.js index 026ea825..973b6ab5 100644 --- a/boards/default_src/micropython/blocks/ai_local.js +++ b/boards/default_src/micropython/blocks/ai_local.js @@ -2,6 +2,7 @@ import * as Blockly from 'blockly/core'; const AI_LOCAL_VOICE_HUE = '#2FAD7A'; const AI_LOCAL_GRAPH_HUE = '#90A244'; const IOT_HUE = '#526FC3'; +const DISPLAY_ONBOARD_HUE = '#569A98'; //voice part export const VOICE_RECOGNITION_CONTROL = { @@ -270,11 +271,27 @@ export const CREATE_CAMERA = { .appendField(Blockly.Msg.MIXLY_SETUP + Blockly.Msg.MIXLY_SMARTCAMERA) .appendField(Blockly.Msg.LISTS_SET_INDEX_SET + Blockly.Msg.MIXLY_SHOOTING_SIZE) .appendField(new Blockly.FieldDropdown([ - ['LCD : 240px*240px', "LCD"], + ['240px*240px', "R240*240"], + ['320px*320px', "R320*320"], + ['128px*128px', "R128*128"], + ['96px*96px', "R96*96"], ['VGA : 640px*480px', "VGA"], + ['HVGA : 480px*320px', "HVGA"], ['QVGA : 320px*240px', "QVGA"], ['QQVGA : 160px*120px', "QQVGA"] - ]), "cmd") + ]), "cmd"); + this.appendDummyInput("") + .appendField(Blockly.Msg.MIXLY_HORIZONTAL_MIRRORING) + .appendField(new Blockly.FieldDropdown([ + [Blockly.Msg.MIXLY_TURTLE_WRITE_MOVE_FALSE, "False"], + [Blockly.Msg.MIXLY_TURTLE_WRITE_MOVE_TRUE, "True"] + ]),"hm"); + this.appendDummyInput("") + .appendField(Blockly.Msg.MIXLY_VERTICAL_MIRRORING) + .appendField(new Blockly.FieldDropdown([ + [Blockly.Msg.MIXLY_TURTLE_WRITE_MOVE_FALSE, "False"], + [Blockly.Msg.MIXLY_TURTLE_WRITE_MOVE_TRUE, "True"] + ]),"vf"); this.setPreviousStatement(true); this.setNextStatement(true); this.setInputsInline(true); @@ -287,6 +304,16 @@ export const SHOOT_AND_SAVE_PICTURE = { this.appendValueInput('direct') .appendField(Blockly.Msg.MIXLY_SHOOT_AND_SAVE_PICTURE) .appendField(Blockly.Msg.LISTS_SET_INDEX_SET + Blockly.Msg.MICROPYTHON_HUSKYLENS_SAVE_AS + Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_THE_PATH); + this.appendValueInput('quality') + .appendField(Blockly.Msg.MIXLY_IMAGE_QUALITY); + this.appendDummyInput('') + .appendField(Blockly.Msg.MIXLY_ROTATION_ANGLE) + .appendField(new Blockly.FieldDropdown([ + ['0','0'], + ['90','90'], + ['180','180'], + ['270','270'] + ]),'angle'); this.setPreviousStatement(true); this.setNextStatement(true); this.setInputsInline(true); @@ -308,12 +335,63 @@ export const GET_PICTURE_DATA_EXACT = { } }; -export const SCREEN_SHOW_CAM_GRAPH_SHOOT = { +export const GET_PICTURE_DATA_WHS = { init: function () { this.setColour(AI_LOCAL_GRAPH_HUE); this.appendDummyInput() - .appendField(Blockly.Msg.MIXlY_SCREEN_SHOW_CAM_SHOOT); - this.appendValueInput('boolean'); + .appendField(Blockly.Msg.MIXLY_GET_PICTURE_DATA) + .appendField(new Blockly.FieldDropdown([ + [Blockly.Msg.MIXLY_WIDTH,"get_pixel_width"], + [Blockly.Msg.MIXLY_HEIGHT,"get_pixel_height"], + [Blockly.Msg.MIXLY_SMARTCAMERA + Blockly.Msg.MIXLY_MODEL_NUMBER ,"get_sensor_name"] + ]),"kind") + this.setOutput(true); + this.setInputsInline(true); + } +}; + +export const SCREEN_SHOW_CAM_GRAPH_SHOOT = { + init: function () { + this.setColour(AI_LOCAL_GRAPH_HUE); + this.appendDummyInput('') + .appendField(Blockly.Msg.MIXlY_SCREEN_SHOW_CAM_SHOOT) + // this.appendValueInput('direct') + // .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_SHOW_IMAGE) + // .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_THE_PATH); + // this.appendDummyInput('') + // .appendField('(' + Blockly.Msg.MIXLY_ONLY + Blockly.Msg.MIXLY_SUPPORT + 'jpg/jpeg)') + this.appendDummyInput('') + .appendField(Blockly.Msg.MIXLY_SYNC_DISPLAY) + .appendField(new Blockly.FieldDropdown([ + [Blockly.Msg.MIXLY_TURTLE_WRITE_MOVE_FALSE, "0"], + [Blockly.Msg.MIXLY_TURTLE_WRITE_MOVE_TRUE, "1"] + ]),"sync"); + this.setPreviousStatement(true); + this.setNextStatement(true); + this.setInputsInline(true); + } +}; + +export const SCREEN_DISPLAY_IMAGE = { + init: function () { + this.setColour(DISPLAY_ONBOARD_HUE); + this.appendValueInput('direct') + .appendField(Blockly.Msg.MIXLY_MICROBIT_JS_MONITOR_SHOW_IMAGE) + .appendField(Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_THE_PATH); + this.appendDummyInput('') + .appendField(Blockly.Msg.MIXLY_ROTATION_ANGLE) + .appendField(new Blockly.FieldDropdown([ + ['0','0'], + ['90','90'], + ['180','180'], + ['270','270'] + ]),'angle'); + this.appendDummyInput('') + .appendField(Blockly.Msg.MIXLY_SYNC_DISPLAY) + .appendField(new Blockly.FieldDropdown([ + [Blockly.Msg.MIXLY_TURTLE_WRITE_MOVE_FALSE, "0"], + [Blockly.Msg.MIXLY_TURTLE_WRITE_MOVE_TRUE, "1"] + ]),"sync"); this.setPreviousStatement(true); this.setNextStatement(true); this.setInputsInline(true); @@ -329,11 +407,11 @@ export const AI_CAMERA_INIT = { this.appendDummyInput("") .appendField(Blockly.Msg.MIXLY_SETUP + Blockly.Msg.LISTS_SET_INDEX_INPUT_TO) .appendField(new Blockly.FieldDropdown([ - [Blockly.Msg.MIXLY_QR_CODE + Blockly.Msg.MIXLY_RECOGNITION, "CODE_DETECTION"], - [Blockly.Msg.MIXLY_COLOR_RECOGNTITION, "COLOR_DETECTION"], - [Blockly.Msg.MIXLY_CAT_FACE + Blockly.Msg.MIXLY_RECOGNITION, "CAT_FACE_DETECTION"], - [Blockly.Msg.MIXLY_FACE_CLASSIFIER, "FACE_DETECTION"], - [Blockly.Msg.MIXLY_AipFace, "FACE_RECOGNITION"] + [Blockly.Msg.MIXLY_QR_CODE + Blockly.Msg.MIXLY_RECOGNITION, "QRReader"], + [Blockly.Msg.MIXLY_COLOR_RECOGNTITION, "ColorDetector"], + [Blockly.Msg.MIXLY_CAT + Blockly.Msg.MIXLY_RECOGNITION, "CatDetector"], + [Blockly.Msg.MIXLY_HUMAN + Blockly.Msg.MIXLY_RECOGNITION, "HumanDetector"], + [Blockly.Msg.MIXLY_AipFace, "FaceDetector"] ]), "kind"); this.setInputsInline(true); this.setPreviousStatement(true, null); @@ -341,11 +419,301 @@ export const AI_CAMERA_INIT = { } }; +export const AI_CAMERA_INIT_FACERECOGNIZE = { + init: function () { + this.setColour(AI_LOCAL_GRAPH_HUE); + this.appendValueInput('SUB') + .appendField(Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_MAKE) + .setCheck("var"); + this.appendDummyInput("") + .appendField(Blockly.Msg.MIXLY_SETUP + Blockly.Msg.LISTS_SET_INDEX_INPUT_TO) + .appendField(Blockly.Msg.MIXLY_FACE_RECOGNIZER); + this.appendValueInput("PATH") + .appendField(Blockly.Msg.PATH_OF_FACE_DATABASE); + this.setInputsInline(true); + this.setPreviousStatement(true, null); + this.setNextStatement(true, null); + } +}; + +export const MODEL_LOGOUT = { + init: function () { + this.setColour(AI_LOCAL_GRAPH_HUE); + this.appendDummyInput("") + .appendField(Blockly.Msg.MIXLY_LOGOUT) + this.appendValueInput('SUB') + .appendField(Blockly.Msg.MIXLY_TENSORFLOW_MODEL) + .setCheck("var"); + this.setInputsInline(true); + this.setPreviousStatement(true, null); + this.setNextStatement(true, null); + } +}; + +export const MODEL_RUN = { + init: function () { + this.setColour(AI_LOCAL_GRAPH_HUE); + this.appendValueInput('SUB') + .appendField(Blockly.Msg.MIXLY_TENSORFLOW_MODEL) + .setCheck("var"); + this.appendValueInput("FRAME") + .appendField(Blockly.Msg.MIXLY_RUN + Blockly.Msg.MIXLY_RECOGNITION_RECGNITION + Blockly.Msg.MIXLY_AipImageClassify_Image) + this.setInputsInline(true); + this.setOutput(true); + } +}; + +export const MODEL_WHETHER_RUN_SUCCEED = { + init: function () { + this.setColour(AI_LOCAL_GRAPH_HUE); + this.appendValueInput("SUB") + .appendField(Blockly.Msg.MIXLY_RECOGNITION_RECGNITION) + this.appendDummyInput("") + .appendField( Blockly.Msg.MIXLY_WHETHER + Blockly.Msg.MIXLY_SUCCESS) + this.setInputsInline(true); + this.setOutput(true); + } +}; + +export const GET_HOW_MUCH_RECOGNITION = { + init: function () { + this.setColour(AI_LOCAL_GRAPH_HUE); + this.appendValueInput("SUB") + .appendField(Blockly.Msg.MIXLY_COLOR_CHASE_ANALYSIS); + this.appendDummyInput("") + .appendField(Blockly.Msg.MIXLY_GET +Blockly.Msg.MIXLY_HOW_MUCH) + .appendField(new Blockly.FieldDropdown([ + [Blockly.Msg.MIXLY_QR_CODE, "QRReader"], + [Blockly.Msg.HTML_COLOUR, "ColorDetector"], + [Blockly.Msg.MIXLY_CAT, "CatDetector"], + [Blockly.Msg.MIXLY_HUMAN, "HumanDetector"], + [Blockly.Msg.MIXLY_FACE, "FaceDetector"] + ]), "kind"); + this.appendDummyInput("") + .appendField(Blockly.Msg.MIXLY_BE_IDENTIFIED); + this.setInputsInline(true); + this.setOutput(true); + } +}; + +export const GET_NO_RECOGNITION = { + init: function () { + this.setColour(AI_LOCAL_GRAPH_HUE); + this.appendValueInput("SUB") + .appendField(Blockly.Msg.MIXLY_COLOR_CHASE_ANALYSIS); + this.appendValueInput("NO") + .appendField(Blockly.Msg.MIXLY_GET + Blockly.Msg.MIXLY_4DIGITDISPLAY_NOMBER1); + this.appendDummyInput("") + .appendField(Blockly.Msg.MIXLY_4DIGITDISPLAY_NOMBER2) + .appendField(new Blockly.FieldDropdown([ + [Blockly.Msg.MIXLY_QR_CODE, "QRReader"], + [Blockly.Msg.HTML_COLOUR, "ColorDetector"], + [Blockly.Msg.MIXLY_CAT, "CatDetector"], + [Blockly.Msg.MIXLY_HUMAN, "HumanDetector"], + [Blockly.Msg.MIXLY_FACE, "FaceDetector"] + ]), "kind"); + this.appendDummyInput("") + .appendField(Blockly.Msg.MIXLY_DE + Blockly.Msg.OLED_STRING); + this.setInputsInline(true); + this.setOutput(true); + } +}; + +export const GET_NO_CAT_OR_FACE_RECOGNITION = { + init: function () { + this.setColour(AI_LOCAL_GRAPH_HUE); + this.appendValueInput("SUB") + .appendField(Blockly.Msg.MIXLY_COLOR_CHASE_ANALYSIS); + this.appendValueInput("NO") + .appendField(Blockly.Msg.MIXLY_GET + Blockly.Msg.MIXLY_4DIGITDISPLAY_NOMBER1); + this.appendDummyInput("") + .appendField(Blockly.Msg.MIXLY_4DIGITDISPLAY_NOMBER2) + .appendField(new Blockly.FieldDropdown([ + [Blockly.Msg.MIXLY_QR_CODE, "QRReader"], + [Blockly.Msg.HTML_COLOUR, "ColorDetector"], + [Blockly.Msg.MIXLY_CAT, "CatDetector"], + [Blockly.Msg.MIXLY_HUMAN, "HumanDetector"], + [Blockly.Msg.MIXLY_FACE, "FaceDetector"] + ]), "kind"); + this.appendDummyInput("") + .appendField(Blockly.Msg.MIXLY_DE + Blockly.Msg.MIXLY_CONFIDENCE_DEGREE); + this.setInputsInline(true); + this.setOutput(true); + } +}; + +export const GET_NO_XY_RECOGNITION = { + init: function () { + this.setColour(AI_LOCAL_GRAPH_HUE); + this.appendValueInput("SUB") + .appendField(Blockly.Msg.MIXLY_COLOR_CHASE_ANALYSIS); + this.appendValueInput("NO") + .appendField(Blockly.Msg.MIXLY_GET + Blockly.Msg.MIXLY_4DIGITDISPLAY_NOMBER1); + this.appendDummyInput("") + .appendField(Blockly.Msg.MIXLY_4DIGITDISPLAY_NOMBER2) + .appendField(new Blockly.FieldDropdown([ + [Blockly.Msg.MIXLY_QR_CODE, "QRReader"], + [Blockly.Msg.HTML_COLOUR, "ColorDetector"], + [Blockly.Msg.MIXLY_CAT, "CatDetector"], + [Blockly.Msg.MIXLY_HUMAN, "HumanDetector"], + [Blockly.Msg.MIXLY_FACE, "FaceDetector"] + ]), "kind"); + this.appendDummyInput("") + .appendField(Blockly.Msg.MIXLY_DE + Blockly.Msg.MIXLY_POSITION_XY) + .appendField(new Blockly.FieldDropdown([ + ["x","0"], + ["y","1"], + ["w","2"], + ["h","3"], + [Blockly.Msg.MIXLY_ALL + '(x,y,w,h)',"all"] + ]),"coord"); + this.setInputsInline(true); + this.setOutput(true); + } +}; + +export const GET_NO_XY_RECOGNITION_FACE = { + init: function () { + this.setColour(AI_LOCAL_GRAPH_HUE); + this.appendValueInput("SUB") + .appendField(Blockly.Msg.MIXLY_COLOR_CHASE_ANALYSIS); + this.appendValueInput("NO") + .appendField(Blockly.Msg.MIXLY_GET + Blockly.Msg.MIXLY_4DIGITDISPLAY_NOMBER1); + this.appendDummyInput("") + .appendField(Blockly.Msg.MIXLY_4DIGITDISPLAY_NOMBER2) + .appendField(Blockly.Msg.MIXLY_FACE); + this.appendDummyInput("") + .appendField(Blockly.Msg.MIXLY_DE + Blockly.Msg.MIXLY_POSITION_XY) + .appendField(new Blockly.FieldDropdown([ + [Blockly.Msg.MIXLY_LEFT_EYE,"[0,1]"], + [Blockly.Msg.MIXLY_RIGHT_EYE,"[2,3"], + [Blockly.Msg.MIXLY_NOSE,"[4,5"], + [Blockly.Msg.MIXLY_LEFT_MOUSE_CORNER,"[6,7]"], + [Blockly.Msg.MIXLY_RIGHT_MOUSE_CORNER,"[8,9"], + [Blockly.Msg.MIXLY_ALL ,"all"] + ]),"part") + this.setInputsInline(true); + this.setOutput(true); + } +}; + +export const GET_NO_FACE_RECOGNITION_INFO = { + init: function () { + this.setColour(AI_LOCAL_GRAPH_HUE); + this.appendValueInput("SUB") + .appendField(Blockly.Msg.MIXLY_COLOR_CHASE_ANALYSIS); + this.appendValueInput("NO") + .appendField(Blockly.Msg.MIXLY_GET + Blockly.Msg.MIXLY_4DIGITDISPLAY_NOMBER1); + this.appendDummyInput("") + .appendField(Blockly.Msg.MIXLY_4DIGITDISPLAY_NOMBER2 + Blockly.Msg.MIXLY_FACE + Blockly.Msg.MIXLY_DE) + .appendField(new Blockly.FieldDropdown([ + [Blockly.Msg.MIXLY_FACE_ID,"id"], + [Blockly.Msg.MILXY_FACE_SIMILARITY,"similarity"], + [Blockly.Msg.MIXLY_FACE_NAME,"name"] + ]),"kind"); + this.setInputsInline(true); + this.setOutput(true); + } +}; + +export const Register_color_recognition_fixed = { + init: function () { + this.setColour(AI_LOCAL_GRAPH_HUE); + this.appendValueInput('SUB') + .appendField(Blockly.Msg.MIXLY_TENSORFLOW_MODEL) + .setCheck("var"); + this.appendDummyInput("") + .appendField(Blockly.Msg.MIXLY_RECOGNITION_RECGNITION + Blockly.Msg.HTML_COLOUR) + .appendField(new Blockly.FieldDropdown([ + [Blockly.Msg.COLOUR_RGB_RED,"red"], + [Blockly.Msg.COLOUR_RGB_GREEN,"green"], + [Blockly.Msg.COLOUR_RGB_BLUE,"blue"], + [Blockly.Msg.COLOUR_YELLOW,"yellow"], + [Blockly.Msg.COLOUR_CYAN,"cyan"], + [Blockly.Msg.COLOUR_RGB_PURPLE,"purple"], + [Blockly.Msg.COLOUR_BLACK,"black"], + [Blockly.Msg.COLOUR_WHITE,"white"] + ]),"color"); + this.appendValueInput("AREA") + .appendField(Blockly.Msg.MINIMUN_DETECTABLE_AREA); + this.setInputsInline(true); + this.setPreviousStatement(true, null); + this.setNextStatement(true, null); + } +}; + +export const Register_color_recognition = { + init: function () { + this.setColour(AI_LOCAL_GRAPH_HUE); + this.appendValueInput('SUB') + .appendField(Blockly.Msg.MIXLY_TENSORFLOW_MODEL) + .setCheck("var"); + this.appendDummyInput("") + .appendField(Blockly.Msg.REGUSTER_COLOR_RECOGNITION) + this.appendValueInput("MIN") + .appendField('H、S、V' + Blockly.Msg.blockpy_TUPLE_MIN); + this.appendValueInput("MAX") + .appendField('H、S、V' + Blockly.Msg.blockpy_TUPLE_MAX); + this.appendValueInput("COLOR") + .appendField(Blockly.Msg.HTML_COLOUR + Blockly.Msg.MIXLY_NAME) + this.appendValueInput("AREA") + .appendField(Blockly.Msg.MINIMUN_DETECTABLE_AREA); + this.setInputsInline(true); + this.setPreviousStatement(true, null); + this.setNextStatement(true, null); + } +}; + +export const REGISTER_NEW_FACE = { + init: function () { + this.setColour(AI_LOCAL_GRAPH_HUE); + this.appendValueInput('SUB') + .appendField(Blockly.Msg.MIXLY_TENSORFLOW_MODEL) + .setCheck("var"); + this.appendDummyInput() + .appendField(Blockly.Msg.register_a_new_face_in_the_database); + this.appendValueInput("NAME") + .appendField(Blockly.Msg.MICROPYTHON_HUSKYLENS_NAME); + this.setPreviousStatement(true); + this.setNextStatement(true); + this.setInputsInline(true); + } +}; + +export const DELETE_FACE_FROM_DATABASE = { + init: function () { + this.setColour(AI_LOCAL_GRAPH_HUE); + this.appendValueInput('SUB') + .appendField(Blockly.Msg.MIXLY_TENSORFLOW_MODEL) + .setCheck("var"); + this.appendDummyInput() + .appendField(Blockly.Msg.delete_the_face_from_the_database); + this.appendValueInput("ID") + .appendField('id'); + this.setPreviousStatement(true); + this.setNextStatement(true); + this.setInputsInline(true); + } +}; + +export const PRINT_FACE_DATABASE = { + init: function () { + this.setColour(AI_LOCAL_GRAPH_HUE); + this.appendValueInput('SUB') + .appendField(Blockly.Msg.MIXLY_TENSORFLOW_MODEL) + .setCheck("var"); + this.appendDummyInput() + .appendField(Blockly.Msg.print_the_contents_of_the_face_database); + this.setPreviousStatement(true); + this.setNextStatement(true); + this.setInputsInline(true); + } +}; export const GET_QR_CODE_RECOGNITION_DATA = { init: function () { this.setColour(AI_LOCAL_GRAPH_HUE); - this.appendValueInput('SUB') + this.appendValueInput('SUB') .setCheck("var"); this.appendDummyInput() .appendField(Blockly.Msg.MIXLY_GET_QR_CODE_RECOGNITION_RESULT); diff --git a/boards/default_src/micropython/generators/ai_local.js b/boards/default_src/micropython/generators/ai_local.js index 584ba5ac..a210d688 100644 --- a/boards/default_src/micropython/generators/ai_local.js +++ b/boards/default_src/micropython/generators/ai_local.js @@ -124,15 +124,19 @@ export const CI130X_BROADCAST_SYSTEM_TIME = function (_, generator) { //graph part export const CREATE_CAMERA = function (_, generator) { var version = Boards.getSelectedBoardKey().split(':')[2]; - generator.definitions_['import_camera'] = 'import camera'; + generator.definitions_['import_Camera_FrameSize_PixelFormat'] = 'from camera import Camera,FrameSize,PixelFormat'; var cmd = this.getFieldValue('cmd'); - var code = 'cam = camera.GC032A(camera.' + cmd + ')\n'; + var hm = this.getFieldValue('hm'); + var vf = this.getFieldValue('vf'); + var code = 'cam = Camera(FrameSize.' + cmd + ',hmirror='+ hm + ',vflip='+ vf +')\n'; return code; } export const SHOOT_AND_SAVE_PICTURE = function (_, generator) { var direct = generator.valueToCode(this, 'direct', generator.ORDER_ATOMIC); - var code = 'cam.snapshot(' + direct + ')\n'; + var q = generator.valueToCode(this, 'quality', generator.ORDER_ATOMIC); + var a = this.getFieldValue('angle'); + var code = 'cam.snapshot(' + direct + ',quality='+ q + ',rotation=' + a + ')\n'; return code; } @@ -143,17 +147,166 @@ export const GET_PICTURE_DATA_EXACT = function (_, generator) { return [code, generator.ORDER_ATOMIC]; } +export const GET_PICTURE_DATA_WHS = function (_, generator) { + var kind = this.getFieldValue('kind'); + var code = 'cam.' + kind +'()'; + return [code, generator.ORDER_ATOMIC]; +} + export const SCREEN_SHOW_CAM_GRAPH_SHOOT = function (_, generator) { - var bool = generator.valueToCode(this, 'boolean', generator.ORDER_ATOMIC); - var code = 'cam.display(show='+ bool +')\n'; + var s = this.getFieldValue('sync'); + var code = 'onboard_tft.display(data, sync='+ s +')\n'; + return code; +} + +export const SCREEN_DISPLAY_IMAGE = function (_, generator) { + var direct = generator.valueToCode(this, 'direct', generator.ORDER_ATOMIC); + var a = this.getFieldValue('angle'); + var s = this.getFieldValue('sync'); + var code = 'onboard_tft.display(' + direct + ',rotation=' + a + ',sync='+ s + ')\n'; return code; } export const AI_CAMERA_INIT = function (_, generator) { - generator.definitions_['import_ai_camera'] = 'import ai_camera'; + generator.definitions_['import_esp_dl'] = 'import esp_dl'; var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC); var cmd = this.getFieldValue('kind'); - var code = sub +' = ai_camera.AI(ai_camera.' + cmd + ')\n'; + var code = sub +' = esp_dl.'+cmd + '(width=cam.get_pixel_width(), height=cam.get_pixel_height())\n'; + return code; +} + +export const AI_CAMERA_INIT_FACERECOGNIZE = function (_, generator) { + generator.definitions_['import_esp_dl'] = 'import esp_dl'; + var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC); + var path = generator.valueToCode(this, 'PATH', generator.ORDER_ATOMIC); + var code = sub +' = esp_dl.FaceRecognizer(width=cam.get_pixel_width(), height=cam.get_pixel_height(), db_path='+ path +')\n'; + return code; +} + +export const MODEL_LOGOUT = function (_, generator) { + var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC); + var code = 'del '+sub + '\n'; + return code; +} + +export const MODEL_RUN = function (_, generator) { + var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC); + var frame = generator.valueToCode(this, 'FRAME', generator.ORDER_ATOMIC); + var code = sub + '.run(' + frame +')'; + return [code, generator.ORDER_ATOMIC]; +} + +export const MODEL_WHETHER_RUN_SUCCEED = function (_, generator) { + generator.definitions_['import_esp_dl'] = 'import esp_dl' + var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC); + + var code = 'esp_dl.analyze(' + sub +')'; + return [code, generator.ORDER_ATOMIC]; +} + +export const GET_HOW_MUCH_RECOGNITION = function (_, generator) { + generator.definitions_['import_esp_dl'] = 'import esp_dl' + var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC); + var code = 'esp_dl.analyze(' + sub +',"len")'; + return [code, generator.ORDER_ATOMIC]; +} + +export const GET_NO_RECOGNITION = function (_, generator) { + generator.definitions_['import_esp_dl'] = 'import esp_dl' + var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC); + var no = generator.valueToCode(this, 'NO', generator.ORDER_ATOMIC); + var code = 'esp_dl.analyze(' + sub +',"data",'+ no + ')'; + return [code, generator.ORDER_ATOMIC]; +} + +export const GET_NO_XY_RECOGNITION = function (_, generator) { + generator.definitions_['import_esp_dl'] = 'import esp_dl' + var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC); + var no = generator.valueToCode(this, 'NO', generator.ORDER_ATOMIC); + var coord = this.getFieldValue('coord'); + if(coord == "all"){ + var code = 'esp_dl.analyze(' + sub +',"box",'+ no + ')'; + }else{ + var code = 'esp_dl.analyze(' + sub +',"box",'+ no + ')['+ coord +']'; + } + return [code, generator.ORDER_ATOMIC]; +} + +export const GET_NO_XY_RECOGNITION_FACE = function (_, generator) { + generator.definitions_['import_esp_dl'] = 'import esp_dl' + var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC); + var no = generator.valueToCode(this, 'NO', generator.ORDER_ATOMIC); + var part = this.getFieldValue('part'); + if(part == "all"){ + var code = 'esp_dl.analyze(' + sub +',"features",'+ no + ')'; + }else{ + var code = 'esp_dl.analyze(' + sub +',"features",'+ no + ')' +part; + } + return [code, generator.ORDER_ATOMIC]; +} + +export const GET_NO_CAT_OR_FACE_RECOGNITION = function (_, generator) { + generator.definitions_['import_esp_dl'] = 'import esp_dl' + var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC); + var no = generator.valueToCode(this, 'NO', generator.ORDER_ATOMIC); + var code = 'esp_dl.analyze(' + sub +',"score",'+ no + ')'; + return [code, generator.ORDER_ATOMIC]; +} + +export const Register_color_recognition_fixed= function (_, generator) { + var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC); + var color = this.getFieldValue('color'); + var area = generator.valueToCode(this, 'AREA', generator.ORDER_ATOMIC); + if (color == "red"){ + var code = sub + '.register_color((170, 100, 100), (10, 255, 255),'+ color +', area_threshold='+ area + ')\n'; + }else if(color == "green"){ + var code = sub + '.register_color((35, 100, 100), (85, 255, 255),'+ color +', area_threshold='+ area + ')\n'; + }else if(color == "blue"){ + var code = sub + '.register_color((100, 100, 100), (130, 255, 255),'+ color +', area_threshold='+ area + ')\n'; + }else if(color == "yellow"){ + var code = sub + '.register_color((20, 100, 100), (35, 255, 255),'+ color +', area_threshold='+ area + ')\n'; + }else if(color == "cyan"){ + var code = sub + '.register_color((85, 100, 100), (100, 255, 255),'+ color +', area_threshold='+ area + ')\n'; + }else if(color == "purple"){ + var code = sub + '.register_color((130, 100, 100), (150, 255, 255),'+ color +', area_threshold='+ area + ')\n'; + }else if(color == "black"){ + var code = sub + '.register_color((0, 0, 0), (180, 255, 50),'+ color +', area_threshold='+ area + ')\n'; + }else if(color == "white"){ + var code = sub + '.register_color((0, 0, 200), (180, 50, 255),'+ color +', area_threshold='+ area + ')\n'; + } + return code; +} + +export const Register_color_recognition = function (_, generator) { + var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC); + var min = generator.valueToCode(this, 'MIN', generator.ORDER_ATOMIC); + var max = generator.valueToCode(this, 'MAX', generator.ORDER_ATOMIC); + var color = generator.valueToCode(this, 'COLOR', generator.ORDER_ATOMIC); + var area = generator.valueToCode(this, 'AREA', generator.ORDER_ATOMIC); + var code = sub + '.register_color(' + min +', '+ max +', '+ color +', area_threshold='+ area + ')\n'; + return code; +} + +export const REGISTER_NEW_FACE = function (_, generator) { + var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC); + var min = generator.valueToCode(this, 'MIN', generator.ORDER_ATOMIC); + var max = generator.valueToCode(this, 'MAX', generator.ORDER_ATOMIC); + var color = generator.valueToCode(this, 'COLOR', generator.ORDER_ATOMIC); + var area = generator.valueToCode(this, 'AREA', generator.ORDER_ATOMIC); + var code = sub + '.enroll(' + min +', '+ max +', '+ color +', area_threshold='+ area + ')\n'; + return code; +} + +export const DELETE_FACE_FROM_DATABASE = function (_, generator) { + var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC); + var id = generator.valueToCode(this, 'ID', generator.ORDER_ATOMIC); + var code = sub + '.delete_face(' + id + ')\n'; + return code; +} + +export const PRINT_FACE_DATABASE = function (_, generator) { + var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC); + var code = sub + '.print_database()\n'; return code; } diff --git a/boards/default_src/micropython_esp32s3/template.xml b/boards/default_src/micropython_esp32s3/template.xml index 1ad11e73..67b228e1 100644 --- a/boards/default_src/micropython_esp32s3/template.xml +++ b/boards/default_src/micropython_esp32s3/template.xml @@ -1781,7 +1781,7 @@ - + @@ -1970,23 +1970,13 @@ - - - - 0 - - - - - 0 - - - - - 12.jpg - - - + + + + mixly.jpg + + + @@ -2426,25 +2416,230 @@ - 12.jpg + mixly.jpg + + + + + 90 + + + + + frame + + + + + + + + + mixly.jpg - - - + + + mixly.jpg + + + + - ai + Model - + + + + Model + + + + + face.db + + + + + + + Model + + + + + _results + + + + + Model + + + + + frame + + + + + + + + + _results + + + + + + + + _results + + + + + + + _results + + + + + 1 + + + + + + + _results + + + + + 1 + + + + + + + _results + + + + + 1 + + + + + + + _results + + + + + 1 + + + + + + + _results + + + + + 1 + + + + + + + Model + + + + + 256 + + + + + + + Model + + + + + 0,0,0 + + + + + 255,255,255 + + + + + color + + + + + 256 + + + + + + + Model + + + + + name + + + + + + + Model + + + + + 1 + + + + + + + Model + + + + + diff --git a/common/msg/blockly/zh-hans.js b/common/msg/blockly/zh-hans.js index 6adb5f69..b546a19e 100644 --- a/common/msg/blockly/zh-hans.js +++ b/common/msg/blockly/zh-hans.js @@ -4097,7 +4097,7 @@ ZhHans.MIXLY_CAL_TO_ALTITUDE = '计算获取海拔'; ZhHans.MIXLY_SHOOTING_SIZE = '拍摄尺寸'; ZhHans.MIXLY_SHOOT_AND_SAVE_PICTURE = '拍摄照片并保存'; ZhHans.MIXLY_GET_PICTURE_DATA = '获取摄像头图像'; -ZhHans.MIXlY_SCREEN_SHOW_CAM_SHOOT = '屏幕实时显示摄像头采集图像'; +ZhHans.MIXlY_SCREEN_SHOW_CAM_SHOOT = '屏幕显示摄像头数据'; ZhHans.MIXLY_RECOGNITION = '检测'; ZhHans.MIXLY_GET_QR_CODE_RECOGNITION_RESULT = '获取二维码检测结果'; // ZhHans.MIXLY_GET_QR_CODE_RECOGNITION_RESULT_TOOLTIP = '无检测结果返回None,有结果左上角出现绿色小方块,并返回二维码信息。' @@ -4221,4 +4221,24 @@ ZhHans.MIXLY_KJWX = '科研大模型'; ZhHans.MIXLY_DIALOGUE_BACKGROUND = '对话背景'; ZhHans.MIXLY_CUSTOMIZE_MODEL = '可定制化大模型'; ZhHans.MIXLY_SUPPORT = '支持'; +ZhHans.MIXLY_HORIZONTAL_MIRRORING = '水平镜像'; +ZhHans.MIXLY_VERTICAL_MIRRORING = '垂直镜像'; +ZhHans.MIXLY_MODEL_NUMBER = '型号'; +ZhHans.MIXLY_IMAGE_QUALITY = '图像质量'; +ZhHans.MIXLY_ROTATION_ANGLE = '旋转角度'; +ZhHans.MIXLY_SYNC_DISPLAY = '同步显示'; +ZhHans.MIXLY_ONLY = '仅'; +ZhHans.MIXLY_HUMAN = '人'; +ZhHans.MIXLY_CAT = '猫'; +ZhHans.MIXLY_LOGOUT = '注销'; +ZhHans.REGUSTER_COLOR_RECOGNITION = '注册识别颜色(自定义)'; +ZhHans.MINIMUN_DETECTABLE_AREA = '最小检测面积(像素)'; +ZhHans.MIXLY_FACE_RECOGNIZER = '人脸分辨'; +ZhHans.PATH_OF_FACE_DATABASE = '人脸数据库文件的路径'; +ZhHans.register_a_new_face_in_the_database = '在数据库中注册新人脸'; +ZhHans.delete_the_face_from_the_database = '从数据库中删除人脸'; +ZhHans.print_the_contents_of_the_face_database = '打印人脸数据库的内容'; +ZhHans.MIXLY_FACE_ID = '面容ID'; +ZhHans.MILXY_FACE_SIMILARITY = '面容相似度'; +ZhHans.MIXLY_FACE_NAME = '面容姓名'; })(); \ No newline at end of file