[fix] 体験版モードが動作しなくなっていたのを修正

This commit is contained in:
ocogeclub 2021-11-19 22:12:03 +09:00
parent 034ba61198
commit 7c248d9481
5 changed files with 39 additions and 38 deletions

View File

@ -1,6 +1,6 @@
# ocoge
"大岩産 Code Generator" は、Google Blockly ライブラリを使用した、Raspberry Pi 上で動作するブロックプログラム開発・実行環境です。
インストール方法・操作・サンプルなどは、今後『[おこげ倶楽部](https://ocoge.club)』[ミラー](http://ocogeclub.starfree.jp/)にて公開予定です。
インストール方法・操作・サンプルなどは、今後『[おこげ倶楽部](https://ocoge.club)』にて公開予定です。
### 免責
このアプリケーションは特定の環境下で使用する目的で、専門知識を持たない日曜プログラマによって無計画に開発されています。アドバイス・ご意見・ご要望は有難く承りますが、対応の保証はいたしかねます。

View File

@ -183,8 +183,6 @@ Blockly.Msg["UGJ_DECTOHEX_TOOLTIP"] = "10進数を16進数に変換します。"
Blockly.Msg["UGJ_CANVAS_INIT_TITLE"] = "キャンバスを表示";
Blockly.Msg["UGJ_CANVAS_INIT_TOOLTIP"] = "キャンバスを表示し、使用できるようにします。";
Blockly.Msg["UGJ_FACEAPI_TITLE"] = "TensorFlowによる顔検出 %1 ランドマークを検出 %2 %3";
Blockly.Msg["UGJ_FACEAPI_TOOLTIP"] = "TensorFlow とFaceAPI をロードし、顔検出をできるようにします。";
Blockly.Msg["UGJ_SLEEP_TITLE"] = "%1 秒待つ";
Blockly.Msg["UGJ_SLEEP_TOOLTIP"] = "指定した秒数だけ処理を中断します。";
@ -409,7 +407,7 @@ const ugj_runCode = async () => {
// await eval(code).catch(e => { alert(e); });
let AsyncFunction = Object.getPrototypeOf(async function () { }).constructor
let ocogeFunc = new AsyncFunction(ugj_createCode({}));
await ocogeFunc();
await ocogeFunc().catch(e => { alert(e); });
console.log('Code Execution done.');
}

View File

@ -4,7 +4,7 @@
// 定数
const ugj_const = {
doc_root: process.env["HOME"] + '/Documents',
// doc_root: process.env["HOME"] + '/Documents',
app_name: 'ocoge',
mascot_path: './img/',
mascot_defname: 'tamachee.png',
@ -32,7 +32,7 @@ class elUtil {
this.children = [];
this.gpio_backend = ugj_const.pig;
this.i2c_bus = ugj_const.i2c_defbus;
this.doc_current = ugj_const.doc_root;
this.doc_current = process.env["HOME"] + '/Documents';
}
// 0で数値の桁合わせ : NUM=値 LEN=桁数
zeroPadding(NUM, LEN) {
@ -255,6 +255,11 @@ class elUtil {
}
// ブラウザ動作用
class brUtil {
constructor() {
// GPIOブロックは使えません
this.gpio_backend = ugj_const.pig;
}
// マスコット
getMascotFilePath() { return `./img/${ugj_const.mascot_defname}`; }
//ワークスペースのダウンロード
@ -326,18 +331,24 @@ if (!is_el) {
case 'nodemailer':
block = 'メール送信';
break;
case '@ocogeclub/gpio':
case '@ocogeclub/pigpio':
block = 'GPIO';
break;
case '@ocogeclub/bme280':
block = 'BME280';
break;
case '@ocogeclub/amg8833':
block = '赤外線アレイセンサ';
break;
case 'fs':
block = 'ファイル';
break;
case 'path':
block = 'キャンバス保存';
break;
case 'child_process':
block = '外部プログラム実行';
break;
default:
throw new Error(ugj_const.error_ja_all);
}

View File

@ -29,7 +29,7 @@ function createWindow() {
win.loadFile('index.html')
// Open the DevTools.
win.webContents.openDevTools()
// win.webContents.openDevTools()
// Emitted when the window is closed.
// win.on('closed', () => {

View File

@ -1364,39 +1364,29 @@ Blockly.Python['ugj_grideye_stop'] = function (block) {
/** Face Detection ** */
/******************** */
var with_landmark;
var ugjFaceapiDefinition = {
"type": "ugj_faceapi",
"message0": "%{BKY_UGJ_FACEAPI_TITLE}",
"args0": [
{
"type": "field_checkbox",
"name": "with_landmark",
"checked": false
},
{
"type": "input_dummy"
},
{
"type": "input_statement",
"name": "do"
}
],
"inputsInline": true,
"tooltip": "%{BKY_UGJ_FACEAPI_TOOLTIP}",
"helpUrl": "",
"style": "multimedia_blocks"
};
Blockly.Blocks['ugj_faceapi'] = {
init: function () {
this.jsonInit(ugjFaceapiDefinition);
this.appendDummyInput()
.appendField("TensorFlowによる顔検出を秒に")
.appendField(new Blockly.FieldDropdown([["1", "1000"], ["2", "500"], ["5", "200"], ["10", "100"]]), "interval_sec")
.appendField("回実行:")
.appendField(new Blockly.FieldCheckbox("TRUE"), "with_landmark")
.appendField("ランドマークを検出");
this.appendStatementInput("do")
.setCheck(null);
this.setTooltip("TensorFlow とFaceAPI をロードし、顔検出をできるようにします。");
this.setHelpUrl("");
this.setStyle('multimedia_blocks');
}
};
Blockly.JavaScript['ugj_faceapi'] = function (block) {
var dropdown_interval_sec = block.getFieldValue('interval_sec');
with_landmark = block.getFieldValue('with_landmark') == 'TRUE';
var statements_do = Blockly.JavaScript.statementToCode(block, 'do');
var code = [
`require('@tensorflow/tfjs-node');`,
`const faceapi = require('@vladmandic/face-api/dist/face-api.node.js');`,
`const detect_intvl = ${dropdown_interval_sec};`,
statements_do,
''
].join('\n');
@ -1409,7 +1399,7 @@ Blockly.Blocks['ugj_face_init'] = {
this.setInputsInline(true);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setStyle('multimedia_blocks')
this.setStyle('multimedia_blocks');
this.setTooltip("顔検出のためのビデオストリームを開始します。");
this.setHelpUrl("");
}
@ -1496,17 +1486,18 @@ Blockly.JavaScript['ugj_face_detect'] = function (block) {
var code = [
code_model,
"const options = new faceapi.TinyFaceDetectorOptions({ inputSize: 128, scoreThreshold : 0.3 });",
`const onPlay = async () => {`,
// ` const detectInterval = setInterval(async () => {`,
// `const onPlay = async () => {`,
// `console.log('onplay');`,
` const detectInterval = setInterval(async () => {`,
code_detect_face,
" if (result) {",
code_rect,
statements_do,
" }",
// ` }, 500);`,
" setTimeout(() => onPlay())",
"}",
"videoEl.onplay = onPlay;",
` }, detect_intvl);`,
// " setTimeout(() => onPlay())",
// "}",
// "videoEl.onplay = onPlay;",
""
].join('\n');
return code;
@ -1850,6 +1841,7 @@ _grideye_canvas.setAttribute('height', 8);
_grideye_canvas.className = 'subdisplay';
_grideye_canvas.style.width = '160px';
_grideye_canvas.style.height = '160px';
_grideye_canvas.id = 'subcanvas';
document.getElementById('display_area').appendChild(_grideye_canvas);
_grideye_ctx = _grideye_canvas.getContext('2d');
_grideye_imgData = _grideye_ctx.createImageData(8, 8);