This commit is contained in:
Irene-Maxine
2025-10-26 14:27:22 +08:00
parent 00d1c46627
commit 3d0119ba7d
4 changed files with 780 additions and 44 deletions

View File

@@ -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);

View File

@@ -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;
}

View File

@@ -1781,7 +1781,7 @@
</shadow>
</value>
</block>
<block type="set_power_output" m-show="micropython:esp32s3:mixgo_sant micropython:esp32s3:mixgo_soar"></block>
<block type="get_power_output" m-show="micropython:esp32s3:mixgo_sant micropython:esp32s3:mixgo_soar"></block>
<block type="set_all_power_output" m-show="micropython:esp32s3:mixgo_sant micropython:esp32s3:mixgo_soar">
<value name="duty">
<shadow type="math_number">
@@ -1970,23 +1970,13 @@
</shadow>
</value>
</block>
<block type="onboard_tft_show_image_xy_direct" m-show="micropython:esp32s3:mixgo_sant">
<value name="x">
<shadow type="math_number">
<field name="NUM">0</field>
</shadow>
</value>
<value name="y">
<shadow type="math_number">
<field name="NUM">0</field>
</shadow>
</value>
<value name="direct">
<shadow type="text">
<field name="TEXT">12.jpg</field>
</shadow>
</value>
</block>
<block type="SCREEN_DISPLAY_IMAGE" m-show="micropython:esp32s3:mixgo_sant">
<value name="direct">
<shadow type="text">
<field name="TEXT">mixly.jpg</field>
</shadow>
</value>
</block>
<block type="display_scroll_string">
<value name="data">
<shadow type="text">
@@ -2426,25 +2416,230 @@
<block type="SHOOT_AND_SAVE_PICTURE">
<value name="direct">
<shadow type="text">
<field name="TEXT">12.jpg</field>
<field name="TEXT">mixly.jpg</field>
</shadow>
</value>
<value name="quality">
<shadow type="math_number">
<field name="NUM">90</field>
</shadow>
</value>
</block>
<block type="variables_set">
<field name="VAR">frame</field>
<value name="VALUE">
<block type="GET_PICTURE_DATA_EXACT"></block>
</value>
</block>
<block type="GET_PICTURE_DATA_WHS"></block>
<block type="SCREEN_DISPLAY_IMAGE">
<value name="direct">
<shadow type="text">
<field name="TEXT">mixly.jpg</field>
</shadow>
</value>
</block>
<block type="GET_PICTURE_DATA_EXACT"></block>
<block type="SCREEN_SHOW_CAM_GRAPH_SHOOT">
<value name="boolean">
<shadow type="logic_boolean">
<value name="direct">
<shadow type="text">
<field name="TEXT">mixly.jpg</field>
</shadow>
</value>
</block>
<block type="AI_CAMERA_INIT">
<value name="SUB">
<shadow type="variables_get">
<field name="VAR">ai</field>
<field name="VAR">Model</field>
</shadow>
</value>
</block>
<block type="GET_QR_CODE_RECOGNITION_DATA">
<block type="AI_CAMERA_INIT_FACERECOGNIZE">
<value name="SUB">
<shadow type="variables_get">
<field name="VAR">Model</field>
</shadow>
</value>
<value name="PATH">
<shadow type="text">
<field name="TEXT">face.db</field>
</shadow>
</value>
</block>
<block type="MODEL_LOGOUT">
<value name="SUB">
<shadow type="variables_get">
<field name="VAR">Model</field>
</shadow>
</value>
</block>
<block type="variables_set">
<field name="VAR">_results</field>
<value name="VALUE">
<block type="MODEL_RUN">
<value name="SUB">
<shadow type="variables_get">
<field name="VAR">Model</field>
</shadow>
</value>
<value name="FRAME">
<shadow type="variables_get">
<field name="VAR">frame</field>
</shadow>
</value>
</block>
</value>
</block>
<block type="MODEL_WHETHER_RUN_SUCCEED">
<value name="SUB">
<shadow type="variables_get">
<field name="VAR">_results</field>
</shadow>
</value>
</block>
<block type="GET_HOW_MUCH_RECOGNITION">
<value name="SUB">
<shadow type="variables_get">
<field name="VAR">_results</field>
</shadow>
</value>
</block>
<block type="GET_NO_RECOGNITION">
<value name="SUB">
<shadow type="variables_get">
<field name="VAR">_results</field>
</shadow>
</value>
<value name="NO">
<shadow type="math_number">
<field name="NUM">1</field>
</shadow>
</value>
</block>
<block type="GET_NO_CAT_OR_FACE_RECOGNITION">
<value name="SUB">
<shadow type="variables_get">
<field name="VAR">_results</field>
</shadow>
</value>
<value name="NO">
<shadow type="math_number">
<field name="NUM">1</field>
</shadow>
</value>
</block>
<block type="GET_NO_XY_RECOGNITION">
<value name="SUB">
<shadow type="variables_get">
<field name="VAR">_results</field>
</shadow>
</value>
<value name="NO">
<shadow type="math_number">
<field name="NUM">1</field>
</shadow>
</value>
</block>
<block type="GET_NO_XY_RECOGNITION_FACE">
<value name="SUB">
<shadow type="variables_get">
<field name="VAR">_results</field>
</shadow>
</value>
<value name="NO">
<shadow type="math_number">
<field name="NUM">1</field>
</shadow>
</value>
</block>
<block type="GET_NO_FACE_RECOGNITION_INFO">
<value name="SUB">
<shadow type="variables_get">
<field name="VAR">_results</field>
</shadow>
</value>
<value name="NO">
<shadow type="math_number">
<field name="NUM">1</field>
</shadow>
</value>
</block>
<block type="Register_color_recognition_fixed">
<value name="SUB">
<shadow type="variables_get">
<field name="VAR">Model</field>
</shadow>
</value>
<value name="AREA">
<shadow type="math_number">
<field name="NUM">256</field>
</shadow>
</value>
</block>
<block type="Register_color_recognition">
<value name="SUB">
<shadow type="variables_get">
<field name="VAR">Model</field>
</shadow>
</value>
<value name="MIN">
<shadow type="tuple_create_with_text_return">
<field name="TEXT">0,0,0</field>
</shadow>
</value>
<value name="MAX">
<shadow type="tuple_create_with_text_return">
<field name="TEXT">255,255,255</field>
</shadow>
</value>
<value name="COLOR">
<shadow type="text">
<field name="TEXT">color</field>
</shadow>
</value>
<value name="AREA">
<shadow type="math_number">
<field name="NUM">256</field>
</shadow>
</value>
</block>
<block type="REGISTER_NEW_FACE">
<value name="SUB">
<shadow type="variables_get">
<field name="VAR">Model</field>
</shadow>
</value>
<value name="NAME">
<shadow type="text">
<field name="TEXT">name</field>
</shadow>
</value>
</block>
<block type="DELETE_FACE_FROM_DATABASE">
<value name="SUB">
<shadow type="variables_get">
<field name="VAR">Model</field>
</shadow>
</value>
<value name="ID">
<shadow type="math_number">
<field name="NUM">1</field>
</shadow>
</value>
</block>
<block type="PRINT_FACE_DATABASE">
<value name="SUB">
<shadow type="variables_get">
<field name="VAR">Model</field>
</shadow>
</value>
</block>
<!-- <block type="GET_QR_CODE_RECOGNITION_DATA">
<value name="SUB">
<shadow type="variables_get">
<field name="VAR">ai</field>
@@ -2576,7 +2771,7 @@
<field name="VAR">ai</field>
</shadow>
</value>
</block>
</block> -->
</category>
<category id="catAIvoicesensor" colour="#2FAD7A">
<block type="VOICE_RECOGNITION_CONTROL"></block>

View File

@@ -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 = '面容姓名';
})();