mirror of
https://github.com/ocogeclub/ocoge.git
synced 2024-11-21 23:29:48 +00:00
[fix] 体験版モードが動作しなくなっていたのを修正
This commit is contained in:
parent
034ba61198
commit
7c248d9481
@ -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)』にて公開予定です。
|
||||||
|
|
||||||
### 免責
|
### 免責
|
||||||
このアプリケーションは特定の環境下で使用する目的で、専門知識を持たない日曜プログラマによって無計画に開発されています。アドバイス・ご意見・ご要望は有難く承りますが、対応の保証はいたしかねます。
|
このアプリケーションは特定の環境下で使用する目的で、専門知識を持たない日曜プログラマによって無計画に開発されています。アドバイス・ご意見・ご要望は有難く承りますが、対応の保証はいたしかねます。
|
||||||
|
4
index.js
4
index.js
@ -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.');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
2
main.js
2
main.js
@ -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', () => {
|
||||||
|
@ -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による顔検出を1秒に")
|
||||||
|
.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);
|
||||||
|
Loading…
Reference in New Issue
Block a user