sant图像智能更新

This commit is contained in:
Irene-Maxine
2025-10-27 20:26:05 +08:00
parent 7def9bf3a4
commit f721158daf
5 changed files with 359 additions and 134 deletions

View File

@@ -4,6 +4,18 @@ const AI_LOCAL_GRAPH_HUE = '#90A244';
const IOT_HUE = '#526FC3';
const DISPLAY_ONBOARD_HUE = '#569A98';
export const yesorno = {
init: function () {
this.setColour(AI_LOCAL_GRAPH_HUE);
this.appendDummyInput("")
.appendField(new Blockly.FieldDropdown([
[Blockly.Msg.MIXLY_TURTLE_WRITE_MOVE_FALSE, "False"],
[Blockly.Msg.MIXLY_TURTLE_WRITE_MOVE_TRUE, "1"]
]), "state");
this.setOutput(true);
}
};
//voice part
export const VOICE_RECOGNITION_CONTROL = {
init: function () {
@@ -269,7 +281,7 @@ export const CREATE_CAMERA = {
this.setColour(AI_LOCAL_GRAPH_HUE);
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_SETUP + Blockly.Msg.MIXLY_SMARTCAMERA)
.appendField(Blockly.Msg.LISTS_SET_INDEX_SET + Blockly.Msg.MIXLY_SHOOTING_SIZE)
.appendField(Blockly.Msg.MIXLY_SHOOTING_SIZE)
.appendField(new Blockly.FieldDropdown([
['240px*240px', "R240X240"],
['320px*320px', "R320X320"],
@@ -280,18 +292,10 @@ export const CREATE_CAMERA = {
['QVGA : 320px*240px', "QVGA"],
['QQVGA : 160px*120px', "QQVGA"]
]), "cmd");
this.appendDummyInput("")
this.appendValueInput("HM")
.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.appendValueInput("VF")
.appendField(Blockly.Msg.MIXLY_VERTICAL_MIRRORING);
this.setPreviousStatement(true);
this.setNextStatement(true);
this.setInputsInline(true);
@@ -320,15 +324,83 @@ export const SHOOT_AND_SAVE_PICTURE = {
}
};
export const GET_IMAGE_AND_SAVE = {
init: function () {
this.setColour(AI_LOCAL_GRAPH_HUE);
this.appendValueInput("SUB")
.appendField(Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_MAKE)
this.appendValueInput('direct')
.appendField(Blockly.Msg.MICROPYTHON_HUSKYLENS_SAVE_AS + Blockly.Msg.blockpy_turtle_set_num + 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);
}
};
export const OPEN_IMAGE = {
init: function () {
this.setColour(AI_LOCAL_GRAPH_HUE);
this.appendValueInput('direct')
.appendField(Blockly.Msg.MIXLY_MICROBIT_Turn_on_display + Blockly.Msg.MIXLY_MICROBIT_IMAGE + Blockly.Msg.MIXLY_MICROBIT_PY_STORAGE_THE_PATH + Blockly.Msg.blockpy_turtle_set_num);
this.appendDummyInput('')
.appendField(Blockly.Msg.MIXLY_ROTATION_ANGLE)
.appendField(new Blockly.FieldDropdown([
['0','0'],
['90','90'],
['180','180'],
['270','270']
]),'angle');
this.setOutput(true);
this.setInputsInline(true);
}
};
export const CAMERA_LOOGOUT = {
init: function () {
this.setColour(AI_LOCAL_GRAPH_HUE);
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_LOGOUT + Blockly.Msg.MIXLY_SMARTCAMERA)
this.setPreviousStatement(true,null);
this.setNextStatement(true,null)
this.setInputsInline(true);
}
};
export const GET_PICTURE_DATA_EXACT = {
init: function () {
this.setColour(AI_LOCAL_GRAPH_HUE);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_GET_PICTURE_DATA)
// .appendField(new Blockly.FieldDropdown([
// ["RGB565" + Blockly.Msg.MIXLY_SD_DATA,"0"],
// ["JPG" + Blockly.Msg.MIXLY_SD_DATA,"1"],
// [Blockly.Msg.MIXLY_JPG_base64_CODE + Blockly.Msg.MIXLY_SD_DATA ,"2"]
// ]),"kind")
this.setOutput(true);
this.setInputsInline(true);
}
};
export const CONVERT_IMAGE_TO_JPG = {
init: function () {
this.setColour(AI_LOCAL_GRAPH_HUE);
this.appendValueInput("SUB")
.appendField(Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_MAKE)
this.appendDummyInput()
.appendField(Blockly.Msg.A_TO_B)
.appendField(new Blockly.FieldDropdown([
["RGB565" + Blockly.Msg.MIXLY_SD_DATA,"0"],
["JPG" + Blockly.Msg.MIXLY_SD_DATA,"1"],
[Blockly.Msg.MIXLY_JPG_base64_CODE + Blockly.Msg.MIXLY_SD_DATA ,"2"]
["JPG" + Blockly.Msg.MIXLY_SD_DATA,"0"],
[Blockly.Msg.MIXLY_JPG_base64_CODE + Blockly.Msg.MIXLY_SD_DATA ,"1"]
]),"kind")
this.setOutput(true);
this.setInputsInline(true);
@@ -338,12 +410,14 @@ export const GET_PICTURE_DATA_EXACT = {
export const GET_PICTURE_DATA_WHS = {
init: function () {
this.setColour(AI_LOCAL_GRAPH_HUE);
this.appendValueInput("SUB")
.appendField(Blockly.Msg.MIXLY_GET);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_GET_PICTURE_DATA)
.appendField(Blockly.Msg.MIXLY_DE)
.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"]
[Blockly.Msg.MIXLY_WIDTH,"width"],
[Blockly.Msg.MIXLY_HEIGHT,"height"],
[Blockly.Msg.MIXLY_MICROBIT_JS_I2C_FORMAT,"format"]
]),"kind")
this.setOutput(true);
this.setInputsInline(true);
@@ -352,14 +426,9 @@ export const GET_PICTURE_DATA_WHS = {
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.setColour(DISPLAY_ONBOARD_HUE);
this.appendValueInput("SUB")
.appendField(Blockly.Msg.MIXLY_MICROBIT_monitor + Blockly.Msg.OLEDDISPLAY + Blockly.Msg.MIXLY_MICROBIT_IMAGE)
this.appendDummyInput('')
.appendField(Blockly.Msg.MIXLY_SYNC_DISPLAY)
.appendField(new Blockly.FieldDropdown([
@@ -398,6 +467,16 @@ export const SCREEN_DISPLAY_IMAGE = {
}
};
export const GET_SCREEN_IMAGE = {
init: function () {
this.setColour(DISPLAY_ONBOARD_HUE);
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_GET + Blockly.Msg.MIXLY_MICROBIT_monitor + Blockly.Msg.MIXLY_MICROBIT_IMAGE)
this.setOutput(true);
this.setInputsInline(true);
}
};
export const AI_CAMERA_INIT = {
init: function () {
this.setColour(AI_LOCAL_GRAPH_HUE);
@@ -413,6 +492,29 @@ export const AI_CAMERA_INIT = {
[Blockly.Msg.MIXLY_HUMAN + Blockly.Msg.MIXLY_RECOGNITION, "HumanDetector"],
[Blockly.Msg.MIXLY_AipFace, "FaceDetector"]
]), "kind");
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_WIDTH)
.appendField(new Blockly.FieldDropdown([
["240px","240"],
["320px","320"],
["128px","128"],
["96px","96"],
["640px","640"],
["480px","480"],
["160px","160"]
]),"width");
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_HEIGHT)
.appendField(new Blockly.FieldDropdown([
["240px","240"],
["320px","320"],
["128px","128"],
["96px","96"],
["480px","480"],
["320px","320"],
["240px","240"],
["120px","120"]
]),"height");
this.setInputsInline(true);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
@@ -425,6 +527,29 @@ export const AI_CAMERA_INIT_FACERECOGNIZE = {
this.appendValueInput('SUB')
.appendField(Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_MAKE)
.setCheck("var");
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_WIDTH)
.appendField(new Blockly.FieldDropdown([
["240px","240"],
["320px","320"],
["128px","128"],
["96px","96"],
["640px","640"],
["480px","480"],
["160px","160"]
]),"width");
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_HEIGHT)
.appendField(new Blockly.FieldDropdown([
["240px","240"],
["320px","320"],
["128px","128"],
["96px","96"],
["480px","480"],
["320px","320"],
["240px","240"],
["120px","120"]
]),"height");
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_SETUP + Blockly.Msg.LISTS_SET_INDEX_INPUT_TO)
.appendField(Blockly.Msg.MIXLY_FACE_RECOGNIZER);
@@ -623,7 +748,7 @@ export const Register_color_recognition_fixed = {
.appendField(Blockly.Msg.MIXLY_TENSORFLOW_MODEL)
.setCheck("var");
this.appendDummyInput("")
.appendField(Blockly.Msg.MIXLY_RECOGNITION_RECGNITION + Blockly.Msg.HTML_COLOUR)
.appendField(Blockly.Msg.MIXLY_REGISTER + 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"],
@@ -649,7 +774,7 @@ export const Register_color_recognition = {
.appendField(Blockly.Msg.MIXLY_TENSORFLOW_MODEL)
.setCheck("var");
this.appendDummyInput("")
.appendField(Blockly.Msg.REGUSTER_COLOR_RECOGNITION)
.appendField(Blockly.Msg.REGISTER_COLOR_RECOGNITION)
this.appendValueInput("MIN")
.appendField('H、S、V' + Blockly.Msg.blockpy_TUPLE_MIN);
this.appendValueInput("MAX")

View File

@@ -1,5 +1,11 @@
import { Boards } from 'mixly';
export const yesorno = function (_, generator) {
var code = this.getFieldValue('state');
return [code, generator.ORDER_ATOMIC];
}
//voice part
export const VOICE_RECOGNITION_CONTROL = function (_, generator) {
var version = Boards.getSelectedBoardKey().split(':')[2];
@@ -124,11 +130,11 @@ 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_FrameSize_PixelFormat'] = 'from camera import Camera,FrameSize,PixelFormat';
generator.definitions_['import_Camera_FrameSize'] = 'from camera import Camera,FrameSize';
var cmd = this.getFieldValue('cmd');
var hm = this.getFieldValue('hm');
var vf = this.getFieldValue('vf');
var code = 'cam = Camera(FrameSize.' + cmd + ',hmirror='+ hm + ',vflip='+ vf +')\n';
var hm = generator.valueToCode(this, 'HM', generator.ORDER_ATOMIC);
var vf = generator.valueToCode(this, 'VF', generator.ORDER_ATOMIC);
var code = 'camera = Camera(FrameSize.' + cmd + ',hmirror='+ hm + ',vflip='+ vf +')\n';
return code;
}
@@ -136,30 +142,67 @@ export const SHOOT_AND_SAVE_PICTURE = function (_, generator) {
var direct = generator.valueToCode(this, 'direct', generator.ORDER_ATOMIC);
var q = generator.valueToCode(this, 'quality', generator.ORDER_ATOMIC);
var a = this.getFieldValue('angle');
var code = 'cam.snapshot(' + direct + ',quality='+ q + ',rotation=' + a + ')\n';
var code = 'camera.snapshot(' + direct + ',quality='+ q + ',rotation=' + a + ')\n';
return code;
}
export const GET_IMAGE_AND_SAVE = function (_, generator) {
generator.definitions_['camera_import_Image'] = 'from camera import Image';
var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
var direct = generator.valueToCode(this, 'direct', generator.ORDER_ATOMIC);
var q = generator.valueToCode(this, 'quality', generator.ORDER_ATOMIC);
var a = this.getFieldValue('angle');
var code = 'Image.save('+ sub + ',path=' + direct + ',quality='+ q + ',rotation=' + a + ')\n';
return code;
}
export const OPEN_IMAGE = function (_, generator) {
generator.definitions_['camera_import_Image'] = 'from camera import Image';
var direct = generator.valueToCode(this, 'direct', generator.ORDER_ATOMIC);
var a = this.getFieldValue('angle');
var code = 'Image.open(path=' + direct +',rotation=' + a + ')';
return [code, generator.ORDER_ATOMIC];
}
export const CAMERA_LOOGOUT = function (_, generator) {
var code = 'camera.deinit()\n';
return code;
}
export const GET_PICTURE_DATA_EXACT = function (_, generator) {
generator.definitions_['import_base64'] = 'import base64';
// var kind = this.getFieldValue('kind');
var code = 'camera.capture()';
return [code, generator.ORDER_ATOMIC];
}
export const CONVERT_IMAGE_TO_JPG = function (_, generator) {
generator.definitions_['camera_import_Image'] = 'from camera import Image';
var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
var kind = this.getFieldValue('kind');
var code = 'cam.snapshot(formats=' + kind +')';
var code = 'Image.convert(' + sub + ', formats=' + kind + ')';
return [code, generator.ORDER_ATOMIC];
}
export const GET_PICTURE_DATA_WHS = function (_, generator) {
generator.definitions_['camera_import_Image'] = 'from camera import Image';
var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
var kind = this.getFieldValue('kind');
var code = 'cam.' + kind +'()';
var code = sub + '.' + kind ;
return [code, generator.ORDER_ATOMIC];
}
export const SCREEN_SHOW_CAM_GRAPH_SHOOT = function (_, generator) {
var version = Boards.getSelectedBoardKey().split(':')[2];
generator.definitions_['import_' + version + '_onboard_tft'] = "from " + version + " import onboard_tft";
var sub = generator.valueToCode(this, 'SUB', generator.ORDER_ATOMIC);
var s = this.getFieldValue('sync');
var code = 'onboard_tft.display(data, sync='+ s +')\n';
var code = 'onboard_tft.display(' + sub +', sync='+ s +')\n';
return code;
}
export const SCREEN_DISPLAY_IMAGE = function (_, generator) {
var version = Boards.getSelectedBoardKey().split(':')[2];
generator.definitions_['import_' + version + '_onboard_tft'] = "from " + version + " import onboard_tft";
var direct = generator.valueToCode(this, 'direct', generator.ORDER_ATOMIC);
var a = this.getFieldValue('angle');
var s = this.getFieldValue('sync');
@@ -167,11 +210,20 @@ export const SCREEN_DISPLAY_IMAGE = function (_, generator) {
return code;
}
export const GET_SCREEN_IMAGE = function (_, generator) {
var version = Boards.getSelectedBoardKey().split(':')[2];
generator.definitions_['import_' + version + '_onboard_tft'] = "from " + version + " import onboard_tft";
var code = 'onboard_tft.screenshot()';
return [code, generator.ORDER_ATOMIC];
}
export const AI_CAMERA_INIT = function (_, generator) {
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 +' = esp_dl.'+cmd + '(width=cam.get_pixel_width(), height=cam.get_pixel_height())\n';
var width = this.getFieldValue('width');
var height = this.getFieldValue('height');
var code = sub +' = esp_dl.'+cmd + '(width='+width+', height='+height+')\n';
return code;
}
@@ -179,7 +231,9 @@ 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';
var width = this.getFieldValue('width');
var height = this.getFieldValue('height');
var code = sub +' = esp_dl.FaceRecognizer(width='+width+', height='+height+', db_path='+ path +')\n';
return code;
}