[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 # ocoge
"大岩産 Code Generator" は、Google Blockly ライブラリを使用した、Raspberry Pi 上で動作するブロックプログラム開発・実行環境です。 "大岩産 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_TITLE"] = "キャンバスを表示";
Blockly.Msg["UGJ_CANVAS_INIT_TOOLTIP"] = "キャンバスを表示し、使用できるようにします。"; 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_TITLE"] = "%1 秒待つ";
Blockly.Msg["UGJ_SLEEP_TOOLTIP"] = "指定した秒数だけ処理を中断します。"; Blockly.Msg["UGJ_SLEEP_TOOLTIP"] = "指定した秒数だけ処理を中断します。";
@ -409,7 +407,7 @@ const ugj_runCode = async () => {
// await eval(code).catch(e => { alert(e); }); // await eval(code).catch(e => { alert(e); });
let AsyncFunction = Object.getPrototypeOf(async function () { }).constructor let AsyncFunction = Object.getPrototypeOf(async function () { }).constructor
let ocogeFunc = new AsyncFunction(ugj_createCode({})); let ocogeFunc = new AsyncFunction(ugj_createCode({}));
await ocogeFunc(); await ocogeFunc().catch(e => { alert(e); });
console.log('Code Execution done.'); console.log('Code Execution done.');
} }

View File

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

View File

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

View File

@ -1364,39 +1364,29 @@ Blockly.Python['ugj_grideye_stop'] = function (block) {
/** Face Detection ** */ /** Face Detection ** */
/******************** */ /******************** */
var with_landmark; 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'] = { Blockly.Blocks['ugj_faceapi'] = {
init: function () { 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) { Blockly.JavaScript['ugj_faceapi'] = function (block) {
var dropdown_interval_sec = block.getFieldValue('interval_sec');
with_landmark = block.getFieldValue('with_landmark') == 'TRUE'; with_landmark = block.getFieldValue('with_landmark') == 'TRUE';
var statements_do = Blockly.JavaScript.statementToCode(block, 'do'); var statements_do = Blockly.JavaScript.statementToCode(block, 'do');
var code = [ var code = [
`require('@tensorflow/tfjs-node');`, `require('@tensorflow/tfjs-node');`,
`const faceapi = require('@vladmandic/face-api/dist/face-api.node.js');`, `const faceapi = require('@vladmandic/face-api/dist/face-api.node.js');`,
`const detect_intvl = ${dropdown_interval_sec};`,
statements_do, statements_do,
'' ''
].join('\n'); ].join('\n');
@ -1409,7 +1399,7 @@ Blockly.Blocks['ugj_face_init'] = {
this.setInputsInline(true); this.setInputsInline(true);
this.setPreviousStatement(true, null); this.setPreviousStatement(true, null);
this.setNextStatement(true, null); this.setNextStatement(true, null);
this.setStyle('multimedia_blocks') this.setStyle('multimedia_blocks');
this.setTooltip("顔検出のためのビデオストリームを開始します。"); this.setTooltip("顔検出のためのビデオストリームを開始します。");
this.setHelpUrl(""); this.setHelpUrl("");
} }
@ -1496,17 +1486,18 @@ Blockly.JavaScript['ugj_face_detect'] = function (block) {
var code = [ var code = [
code_model, code_model,
"const options = new faceapi.TinyFaceDetectorOptions({ inputSize: 128, scoreThreshold : 0.3 });", "const options = new faceapi.TinyFaceDetectorOptions({ inputSize: 128, scoreThreshold : 0.3 });",
`const onPlay = async () => {`, // `const onPlay = async () => {`,
// ` const detectInterval = setInterval(async () => {`, // `console.log('onplay');`,
` const detectInterval = setInterval(async () => {`,
code_detect_face, code_detect_face,
" if (result) {", " if (result) {",
code_rect, code_rect,
statements_do, statements_do,
" }", " }",
// ` }, 500);`, ` }, detect_intvl);`,
" setTimeout(() => onPlay())", // " setTimeout(() => onPlay())",
"}", // "}",
"videoEl.onplay = onPlay;", // "videoEl.onplay = onPlay;",
"" ""
].join('\n'); ].join('\n');
return code; return code;
@ -1850,6 +1841,7 @@ _grideye_canvas.setAttribute('height', 8);
_grideye_canvas.className = 'subdisplay'; _grideye_canvas.className = 'subdisplay';
_grideye_canvas.style.width = '160px'; _grideye_canvas.style.width = '160px';
_grideye_canvas.style.height = '160px'; _grideye_canvas.style.height = '160px';
_grideye_canvas.id = 'subcanvas';
document.getElementById('display_area').appendChild(_grideye_canvas); document.getElementById('display_area').appendChild(_grideye_canvas);
_grideye_ctx = _grideye_canvas.getContext('2d'); _grideye_ctx = _grideye_canvas.getContext('2d');
_grideye_imgData = _grideye_ctx.createImageData(8, 8); _grideye_imgData = _grideye_ctx.createImageData(8, 8);