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