23 Commits

Author SHA1 Message Date
7af2a8a7e0 Merge branch 'main' of https://kevinblog.sytes.net/Code/Kevin/JiboOs 2026-03-22 23:35:26 +02:00
b5abe340c8 Modular Main menu fix, fixed none existing skills index, alsp a plex menu 2026-03-22 23:35:20 +02:00
52de443263 Update the credits to include the alt names of people 2026-03-22 15:49:05 +00:00
73f954ee62 Fixed Bot Basics color 2026-03-21 21:05:41 +00:00
46bc2eba85 Fix "Things to do" color issue and added placeholder "Skills Store" 2026-03-20 19:44:58 +00:00
297d6f036a Added jazzy icon... why did I do this? 2026-03-20 19:36:31 +00:00
d277c2c279 Move "What's New" button 2026-03-20 18:49:25 +00:00
12959cb763 Update the "What's New" text 2026-03-20 18:48:21 +00:00
3e0e486497 Fix typo in "I'm Back" Button that caused a mispronounciation 2026-03-20 01:55:20 +00:00
65e435d544 Replace Jibo Logo with Jibo Revived Logo 2026-03-20 00:53:01 +00:00
3909d506e2 Change 'Last Dance' Message 2026-03-20 00:52:23 +00:00
a96ae91dd4 Remove "(Broken)" from the Bot Basics Name 2026-03-19 22:24:21 +00:00
268cee305e AI Server & jibo AI Server Bridge 2026-03-19 15:39:32 +02:00
216bb1586e HE SPEAKS?!??!?!?!?! 2026-03-19 14:11:26 +02:00
9eb2681de6 Merge branch 'main' of https://kevinblog.sytes.net/Code/Kevin/JiboOs 2026-03-19 05:34:38 +02:00
ba50c0fc08 Broken AI server Part 1
its 5:30 in the morning
2026-03-19 05:34:25 +02:00
6742fd1ca9 Fixed OpenJibOS Logo in README 2026-03-19 00:46:14 +00:00
0d00cfb4b9 Merge pull request 'Upload files to "V3.1/build/opt/jibo/Jibo/Skills/@be/be/node_modules/@be/main-menu/resources/views"' (#1) from ZaneDev/JiboOs:main into main
Reviewed-on: Kevin/JiboOs#1
2026-03-18 21:58:28 +00:00
a5df74f77b Upload files to "V3.1/build/opt/jibo/Jibo/Skills/@be/be/node_modules/@be/main-menu/resources/views" 2026-03-18 21:53:48 +00:00
5c706a13b4 HEY JIBO! 2026-03-18 23:31:33 +02:00
7c581a8b36 Im Back! Button! 2026-03-18 22:26:19 +02:00
32cb6b1ae7 Update README.md 2026-03-17 01:01:01 +00:00
98d5ae4cc1 Update README.md 2026-03-17 00:44:46 +00:00
63 changed files with 8358 additions and 16 deletions

View File

@@ -1,10 +1,13 @@
# JiboOs
- - -
# Jibo Os - openJiboOs
- - -
Artwork by : Pou@Our discord
- - -
# Release Version 3.3.0 InDev
Chagelog.....
you can make custom menu buttons!
![Art Work by pou](openjibos.png "Art Work by pou")
- - -
open-jibOS is a open source version of the jibo OS ,
this repository contains the source for jibos OS , please not this is NOT the full os image dump but instead a collection of only the modified directories that is used by a helper application over at https://kevinblog.sytes.net/Code/Kevin/JiboAutoMod to help you manage and install updates!
- - -

View File

@@ -0,0 +1,46 @@
# Jibo AI Bridge Server
This is a small companion server you run on your PC (same machine as Ollama).
It gives the robot a stable HTTP target and keeps the on-robot code modular.
## Endpoints
- `POST /v1/chat/text` JSON: `{ "text": "..." }``{ "reply": "..." }`
- `POST /v1/chat/audio` JSON: `{ "wav_base64": "..." }``{ "reply": "...", "text": "<transcript>" }`
## Requirements
- Python 3.9+
- Ollama running locally
- default Ollama chat URL: `http://127.0.0.1:11434/api/chat`
Optional (for AUDIO mode):
- `faster-whisper` + `ffmpeg`
## Run
From this folder:
- `python3 server.py --host 0.0.0.0 --port 8020`
Environment variables (optional):
- `OLLAMA_MODEL` (default `phi3.5`)
- `OLLAMA_URL` (default `http://127.0.0.1:11434/api/chat`)
- `WHISPER_MODEL` (default `base`)
Note: Ollama can stay bound to `127.0.0.1:11434` on your PC; the robot only talks to this bridge server (`:8020`).
Install optional STT deps:
- `pip install faster-whisper`
- install `ffmpeg` (platform-specific)
## Robot configuration
Open the tunables UI (`http://<robot-ip>:3333`) and set:
- **Jibo AI Bridge → Server URL**: `http://<your-pc-ip>:8020`
- **Jibo AI Bridge → Input**:
- `AUDIO` (records a short WAV clip on the robot and sends it)
- `TEXT` (uses `globalTurnResult` ASR text if available)

Binary file not shown.

View File

@@ -0,0 +1,383 @@
#!/usr/bin/env python3
"""Minimal AI Bridge server for Jibo.
Endpoints:
- POST /v1/chat/text {"text": "..."} -> {"reply": "..."}
- POST /v1/chat/audio {"wav_base64": "...", "sample_rate": 16000} -> {"reply": "...", "text": "<transcript>"}
LLM:
- Uses Ollama Chat API by default: http://localhost:11434/api/chat
Env:
OLLAMA_URL (default: http://127.0.0.1:11434/api/chat)
OLLAMA_MODEL (default: phi3.5)
STT (optional, for /audio):
- If `faster-whisper` is installed, it will be used.
Env:
WHISPER_MODEL (default: base)
Run:
python3 server.py --host 0.0.0.0 --port 8020
"""
from __future__ import annotations
import argparse
import array
import base64
import io
import json
import os
import tempfile
import time
import traceback
import wave
from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer
from urllib.error import URLError
from urllib.request import Request, urlopen
def _ts() -> str:
# ISO-ish timestamp in local time; good enough for debugging
return time.strftime("%Y-%m-%d %H:%M:%S")
def _log(msg: str):
# Server previously muted logs; we want visibility while debugging.
print(f"[{_ts()}] {msg}", flush=True)
def _json_response(handler: BaseHTTPRequestHandler, status: int, payload: dict):
body = json.dumps(payload).encode("utf-8")
handler.send_response(status)
handler.send_header("Content-Type", "application/json")
handler.send_header("Content-Length", str(len(body)))
handler.end_headers()
handler.wfile.write(body)
def _read_json(handler: BaseHTTPRequestHandler) -> dict:
length = int(handler.headers.get("Content-Length", "0"))
raw = handler.rfile.read(length) if length else b"{}"
return json.loads(raw.decode("utf-8"))
def _ollama_chat(user_text: str) -> str:
ollama_url = os.environ.get("OLLAMA_URL", "http://127.0.0.1:11434/api/chat")
model = os.environ.get("OLLAMA_MODEL", "phi3.5")
req_body = {
"model": model,
"stream": False,
"messages": [
{"role": "system", "content": "You are Jibo, a friendly home robot. Keep replies short and spoken."},
{"role": "user", "content": user_text},
],
}
req = Request(
ollama_url,
data=json.dumps(req_body).encode("utf-8"),
headers={"Content-Type": "application/json"},
method="POST",
)
try:
with urlopen(req, timeout=60) as resp:
data = json.loads(resp.read().decode("utf-8"))
except Exception as e:
# Let caller decide how to respond; include a useful hint in logs.
_log(f"Ollama request failed url={ollama_url!r} err={e!r}")
raise
msg = data.get("message") or {}
content = msg.get("content")
if not content:
raise RuntimeError(f"Unexpected Ollama response: {data}")
return content.strip()
def _short_err(e: BaseException) -> str:
s = str(e) or e.__class__.__name__
s = " ".join(s.split())
if len(s) > 240:
s = s[:240] + "..."
return s
def _ollama_down_reply() -> str:
# Keep it short and speakable.
return "My AI server isn't reachable right now. Please start Ollama on the computer, then try again."
def _wav_diagnostics(wav_bytes: bytes) -> dict:
"""Best-effort WAV parsing + signal stats for debugging mic capture."""
info: dict = {"bytes": len(wav_bytes)}
try:
with wave.open(io.BytesIO(wav_bytes), "rb") as wf: # type: ignore[name-defined]
nch = wf.getnchannels()
sw = wf.getsampwidth()
fr = wf.getframerate()
nframes = wf.getnframes()
info.update({"channels": nch, "sample_width": sw, "frame_rate": fr, "frames": nframes})
# Read up to ~3 seconds of audio for stats (avoid huge CPU)
max_frames = min(nframes, fr * 3)
frames = wf.readframes(max_frames)
except Exception as e:
info["parse_error"] = str(e)
return info
# Only compute stats for 16-bit PCM (most common).
if info.get("sample_width") != 2:
return info
try:
samples = array.array("h")
samples.frombytes(frames)
if not samples:
return info
mn = min(samples)
mx = max(samples)
zeros = sum(1 for s in samples if s == 0)
# RMS over interleaved samples (good enough for quick signal presence)
n = float(len(samples))
rms = (sum(float(s) * float(s) for s in samples) / n) ** 0.5
# Per-channel RMS (helps debug mic arrays)
ch = int(info.get("channels") or 1)
channel_rms = None
if ch > 1:
channel_rms = []
for c in range(ch):
chan = samples[c::ch]
if not chan:
channel_rms.append(0.0)
else:
nn = float(len(chan))
channel_rms.append((sum(float(s) * float(s) for s in chan) / nn) ** 0.5)
info.update(
{
"min": int(mn),
"max": int(mx),
"rms": float(rms),
"zero_frac": float(zeros) / n,
"channel_rms": channel_rms,
}
)
except Exception as e:
info["stats_error"] = str(e)
return info
def _to_loudest_channel_mono_wav(wav_bytes: bytes) -> tuple[bytes, dict]:
"""If WAV is multi-channel 16-bit PCM, pick loudest channel and return mono WAV bytes."""
try:
with wave.open(io.BytesIO(wav_bytes), "rb") as wf:
nch = wf.getnchannels()
sw = wf.getsampwidth()
fr = wf.getframerate()
nframes = wf.getnframes()
frames = wf.readframes(nframes)
except Exception as e:
return wav_bytes, {"convert_error": str(e)}
if nch <= 1 or sw != 2:
return wav_bytes, {"converted": False, "channels": nch, "sample_width": sw}
samples = array.array("h")
samples.frombytes(frames)
if not samples:
return wav_bytes, {"converted": False, "reason": "empty_samples"}
# Choose loudest channel by RMS
rms_list: list[float] = []
for c in range(nch):
chan = samples[c::nch]
if not chan:
rms_list.append(0.0)
else:
nn = float(len(chan))
rms_list.append((sum(float(s) * float(s) for s in chan) / nn) ** 0.5)
best = max(range(nch), key=lambda i: rms_list[i])
mono = samples[best::nch]
out = io.BytesIO()
with wave.open(out, "wb") as ow:
ow.setnchannels(1)
ow.setsampwidth(2)
ow.setframerate(fr)
ow.writeframes(mono.tobytes())
return out.getvalue(), {"converted": True, "picked_channel": best, "channel_rms": rms_list, "frame_rate": fr}
class _Whisper:
def __init__(self):
self._model = None
def available(self) -> bool:
try:
import faster_whisper # noqa: F401
return True
except Exception:
return False
def transcribe_wav_bytes(self, wav_bytes: bytes) -> str:
try:
from faster_whisper import WhisperModel
except Exception as e:
raise RuntimeError(
"Audio mode requires `faster-whisper` (pip install faster-whisper) and ffmpeg on your PC"
) from e
model_name = os.environ.get("WHISPER_MODEL", "base")
if self._model is None:
# CPU-friendly default; user can override via WHISPER_MODEL and faster-whisper params if needed.
self._model = WhisperModel(model_name, device="cpu", compute_type="int8")
with tempfile.NamedTemporaryFile(suffix=".wav", delete=True) as f:
f.write(wav_bytes)
f.flush()
segments, info = self._model.transcribe(f.name)
text = "".join(seg.text for seg in segments).strip()
return text
_whisper = _Whisper()
class Handler(BaseHTTPRequestHandler):
server_version = "JiboAIBridge/1.0"
def do_POST(self):
try:
client = f"{self.client_address[0]}:{self.client_address[1]}"
length = int(self.headers.get("Content-Length", "0") or "0")
_log(f"{client} POST {self.path} len={length}")
if self.path == "/v1/chat/text":
payload = _read_json(self)
text = (payload.get("text") or "").strip()
if not text:
_json_response(self, 400, {"error": "Missing 'text'"})
return
_log(f"{client} /text prompt_chars={len(text)} prompt={text[:200]!r}")
try:
reply = _ollama_chat(text)
_log(f"{client} /text ok reply_chars={len(reply)}")
_json_response(self, 200, {"reply": reply})
except URLError as e:
_log(f"{client} /text ollama_unreachable err={_short_err(e)!r}")
_json_response(self, 200, {"reply": _ollama_down_reply(), "ollama_ok": False, "ollama_error": _short_err(e)})
except ConnectionRefusedError as e:
_log(f"{client} /text ollama_refused err={_short_err(e)!r}")
_json_response(self, 200, {"reply": _ollama_down_reply(), "ollama_ok": False, "ollama_error": _short_err(e)})
return
if self.path == "/v1/chat/audio":
payload = _read_json(self)
b64 = payload.get("wav_base64")
if not b64:
_json_response(self, 400, {"error": "Missing 'wav_base64'"})
return
if not _whisper.available():
_log(f"{client} /audio STT unavailable (faster-whisper not installed)")
_json_response(
self,
503,
{
"error": "STT unavailable: install faster-whisper and ffmpeg on this PC",
"hint": "pip install faster-whisper (and install ffmpeg)",
},
)
return
wav_bytes = base64.b64decode(b64)
diag = _wav_diagnostics(wav_bytes)
wav_for_stt, conv = _to_loudest_channel_mono_wav(wav_bytes)
if conv.get("converted"):
diag_mono = _wav_diagnostics(wav_for_stt)
_log(
f"{client} /audio wav_diag={json.dumps(diag, sort_keys=True)} "
f"mono={json.dumps(diag_mono, sort_keys=True)} conv={json.dumps(conv, sort_keys=True)}"
)
else:
_log(f"{client} /audio wav_diag={json.dumps(diag, sort_keys=True)} conv={json.dumps(conv, sort_keys=True)}")
try:
# Save for debugging (overwrite each time)
out_path = os.environ.get("AI_BRIDGE_LAST_WAV", "jibo_last.wav")
with open(out_path, "wb") as f:
f.write(wav_bytes)
_log(f"{client} /audio decoded bytes={len(wav_bytes)} saved={out_path}")
except Exception as e:
_log(f"{client} /audio failed saving wav: {e}")
transcript = _whisper.transcribe_wav_bytes(wav_for_stt)
if not transcript:
_log(f"{client} /audio empty transcript")
_json_response(self, 200, {"reply": "I didn't catch that. Could you say it again?", "text": ""})
return
_log(f"{client} /audio transcript_chars={len(transcript)} transcript={transcript[:200]!r}")
try:
reply = _ollama_chat(transcript)
_log(f"{client} /audio ok text_chars={len(transcript)} reply_chars={len(reply)}")
_json_response(self, 200, {"reply": reply, "text": transcript})
except URLError as e:
_log(f"{client} /audio ollama_unreachable err={_short_err(e)!r}")
_json_response(
self,
200,
{"reply": _ollama_down_reply(), "text": transcript, "ollama_ok": False, "ollama_error": _short_err(e)},
)
except ConnectionRefusedError as e:
_log(f"{client} /audio ollama_refused err={_short_err(e)!r}")
_json_response(
self,
200,
{"reply": _ollama_down_reply(), "text": transcript, "ollama_ok": False, "ollama_error": _short_err(e)},
)
return
_json_response(self, 404, {"error": "Not found"})
except Exception as e:
_log(f"ERROR {self.path}: {e}\n{traceback.format_exc()}")
_json_response(
self,
500,
{
"error": str(e),
"trace": traceback.format_exc(),
},
)
def log_message(self, format, *args):
# Keep BaseHTTPRequestHandler from double-logging; we do our own.
return
def main():
ap = argparse.ArgumentParser()
ap.add_argument("--host", default="0.0.0.0")
ap.add_argument("--port", type=int, default=8020)
args = ap.parse_args()
server = ThreadingHTTPServer((args.host, args.port), Handler)
_log(f"AI Bridge server listening on http://{args.host}:{args.port}")
_log(
"Ollama: "
+ os.environ.get("OLLAMA_URL", "http://127.0.0.1:11434/api/chat")
+ " model="
+ os.environ.get("OLLAMA_MODEL", "phi3.5")
)
_log("Ollama health check: curl -s http://127.0.0.1:11434/api/tags | head")
if not _whisper.available():
_log("STT: faster-whisper not installed; /v1/chat/audio will return 503")
server.serve_forever()
if __name__ == "__main__":
main()

View File

@@ -0,0 +1,31 @@
{
"enabled": true,
"mode": "TEXT",
"serverBaseUrl": "http://192.168.1.28:8020",
"recordSeconds": 5,
"useDumpStateAudio": true,
"useAsrServiceStt": true,
"asrServiceHost": "127.0.0.1",
"asrServicePort": 8088,
"asrAudioSourceId": "alsa1",
"asrTimeoutMs": 15000,
"asrServiceDebugWs": false,
"asrAutoStart": true,
"wakeupChitchatPhrases": [
"hello",
"howdy",
"hi",
"hey",
"look what i found",
"nice to see you",
"good morning",
"good afternoon",
"good evening"
],
"followupEnabled": true,
"followupDelayMs": 250
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,157 @@
"use strict";
// Dynamically load skills after BE startup.
// This avoids needing to rebuild the big BE bundle when adding new skills on disk.
const path = require("path");
const jibo = require("jibo");
let rlog = null;
try {
rlog = require("./robot-logger");
} catch (e) {
rlog = null;
}
function log(msg, data) {
const line = "[DYN-SKILLS] " + msg;
try {
console.log(line, data || "");
} catch (e) {}
try {
if (rlog && typeof rlog.raw === "function") rlog.raw(line + (data ? " " + JSON.stringify(data) : ""));
} catch (e) {}
}
function normalizeSkillExport(SkillExport, id) {
if (typeof SkillExport === "function") return SkillExport;
if (SkillExport && typeof SkillExport.Skill === "function") return SkillExport.Skill;
throw new Error("Error loading skill: " + id + ". Incorrect exports");
}
function attachLifecycleHooks(be, id, skill) {
// Mirror the hooks the Be constructor normally installs.
try {
skill.on("exit", function () {
be.exit.call(be, skill, ...arguments);
});
skill.on("redirect", function () {
be.skillRedirect.call(be, skill, ...arguments);
});
skill.on("refresh", function () {
be.skillRedirect.call(be, skill, skill.assetPack, ...arguments);
});
} catch (e) {
log("failed to attach lifecycle hooks", { id: id, err: String(e && (e.stack || e.message || e)) });
}
const empty = (done) => {
try {
done();
} catch (e) {}
};
try {
if (!skill.postInit) skill.postInit = empty;
if (!skill.preload) skill.preload = empty;
} catch (e) {}
}
function tryLoadSkill(be, id) {
if (!be || !be.skills) throw new Error("be.skills missing");
if (!id || typeof id !== "string") return false;
if (be.skills[id]) return true;
// eslint-disable-next-line global-require, import/no-dynamic-require
const SkillExport = require(id);
const Skill = normalizeSkillExport(SkillExport, id);
const rootPath = path.dirname(jibo.utils.PathUtils.resolve(id));
const skill = new Skill({ assetPack: id, rootPath: rootPath });
if (typeof be._validateSkill === "function" && !be._validateSkill(skill)) {
throw new Error("not a valid BeSkill");
}
be.skills[id] = skill;
attachLifecycleHooks(be, id, skill);
log("loaded", { id: id });
return true;
}
function collectSkillIdsFromMenuEntries(entries) {
const ids = new Set();
(entries || []).forEach(function (e) {
if (!e) return;
if (e.type === "skill" && e.skillId) ids.add(e.skillId);
if (e.type === "submenu" && Array.isArray(e.children)) {
e.children.forEach(function (c) {
if (c && c.type === "skill" && c.skillId) ids.add(c.skillId);
});
}
});
return Array.from(ids);
}
function loadMissingSkillsFromMenuEntries(be, opts) {
opts = opts || {};
let menuEntries = null;
try {
// Note: this is the modular path (includes provider entries).
menuEntries = require("../menu/menu-entries");
} catch (e) {
log("menu-entries module missing", { err: String(e && (e.stack || e.message || e)) });
return { loaded: [], failed: [] };
}
let res;
try {
res = menuEntries.getMenuEntries({
skillsRoot: opts.skillsRoot,
providersDir: opts.providersDir,
log: function () {
try {
log(Array.prototype.join.call(arguments, " "));
} catch (e) {}
}
});
} catch (e) {
log("getMenuEntries failed", { err: String(e && (e.stack || e.message || e)) });
return { loaded: [], failed: [] };
}
const ids = collectSkillIdsFromMenuEntries(res && res.entries);
log("menu referenced skillIds", { count: ids.length });
const loaded = [];
const failed = [];
ids.forEach(function (id) {
try {
// Only attempt ids that look like NPM packages (reduces noise).
if (typeof id !== "string") return;
if (id.indexOf("/") === -1) return;
if (!be.skills[id]) {
tryLoadSkill(be, id);
loaded.push(id);
}
} catch (e) {
failed.push({ id: id, err: String(e && (e.stack || e.message || e)) });
log("load failed", { id: id, err: String(e && (e.message || e)) });
}
});
return { loaded: loaded, failed: failed, providersDir: res && res.providersDir, skillsRoot: res && res.skillsRoot };
}
module.exports = {
loadMissingSkillsFromMenuEntries: loadMissingSkillsFromMenuEntries
};

View File

@@ -0,0 +1,86 @@
{
"webCore" : {
"serverPort": 8088,
"fileRoot": "/usr/local/var/www/asrservice",
"requestLogging": false
},
"AsrService" : {
"cloud_establish_http_timeout": 5000,
"language": "en-US",
"post_to_performance_service": true,
"log_audio": true,
"log_text" : true,
"log_path" : "/var/log/asr",
"log_level" : "INFO",
"log_server_url" : "https://speech-logging.jibo.com/logdrop/logdrop.py",
"speaker_id_resource_path" : "/var/jibo/asr/",
"name_learning_resource_path" : "/usr/local/share/asr/namelearning",
"name_learning_temp_path" : "/var/jibo/asr/namelearning_temp/",
"name_learning_nbest" : 70,
"active_sleep_duration" : 5000,
"idle_sleep_duration" : 50000,
"block_duration" : 50,
"audio_loop_sleep_us": 10000,
"use_nuance_upload_voc": false,
"dictation_type" : "dictation",
"nuance_uId" : "b8fb02f2c5794963aaafb8c716ef384c",
"contacts_checksum": "",
"loop_checksum": "1",
"customs_checksum": "",
"upload_voc_url": "ws.nuancemobility.net",
"cloud_url": "https://jibo-ncs-engusa-http.nuancemobility.net/NmspServlet/",
"cloud_appid": "HTTP_NMDPPRODUCTION_Jibo_Jibo_Robot_20151231124503",
"cloud_appkey": "a8c18159a8e3ca49471c56d867552bc77693ccdcc041375ee97b7c867160ae1a212f73c9123d1359596931c0be5c8734ef5310af95470d7ec3890434e9b24e0b",
"upload_voc_rootcert": "",
"google_credential": "/usr/local/share/asr/google_asr/credentials-key.json",
"fadeout_duration": 5000000,
"max_logfile_size": 1000,
"log_upload_time_interval": 60000,
"min_available_log_partition_space": 5000,
"max_asr_log_dir_size_before_upload_trigger": 10000,
"max_asr_log_dir_size": 12000,
"size_to_free_up_when_dir_overflowing": 1000,
"asr_resource_path" : "/usr/local/share/asr/",
"max_memory": 150000,
"wipable_files": [
"/var/log/asr/*.pcm",
"/var/log/asr/*.wav",
"/var/log/asr/*.log",
"/var/jibo/asr/sensory_data_td/client_model.bin",
"/var/jibo/asr/sensory_data_td/audio/*",
"/var/jibo/asr/namelearning_temp/*"
],
"resident_task" : "{\"command\":\"start\",\"task_id\":\"task0\",\"audio_source_id\":\"alsa1\",\"hotphrase\":\"hey_jibo\",\"request_id\":\"resident_hey_jibo_self_start\",\"residency\":true}",
"resident_audio_channel" : "{\"action\":\"start\", \"audio_source_id\":\"alsa1\", \"wav_files\":[], \"audio_source\":\"alsa\", \"request_id\":\"self_start_audio_source_request_id\"}",
"task_templates" : {
"hey_jibo_resident": {
"input_template": "{\"name\":\"hey jibo\",\"path\":\"/usr/local/share/asr/hey_jibo\",\"timeout\":0} * {\"name\":\"Speaker ID TD\",\"path\":\"/usr/local/share/asr/sensory_spkr_id_td\",\"audio_tail_length\":1}",
"emitting_recogs": ["hey jibo", "Speaker ID TD"]
},
"hey_jibo": {
"input_template": "{\"name\":\"hey jibo\",\"path\":\"/usr/local/share/asr/hey_jibo\",\"timeout\":0} * ({\"name\":\"pcmwriter\",\"path\":\"/usr/local/share/asr/pcm_writer\",\"timeout\":0,\"audio_tail_length\":0, \"audio_overshoot_duration\":0} | {\"name\":\"Speaker ID TD\",\"path\":\"/usr/local/share/asr/sensory_spkr_id_td\",\"audio_tail_length\":1})",
"emitting_recogs": ["hey jibo", "Speaker ID TD"]
},
"cloud": {
"input_template":"({\"name\":\"google_asr\",\"path\":\"/usr/local/share/asr/google_asr\",\"timeout\":14000,\"bargein\":false,\"nbest\":1,\"speaker_name\":\"\",\"incremental\":false,\"audio_tail_length\":300}| {\"name\":\"sensory_sdet\",\"path\":\"/usr/local/share/asr/jibo_energy_fake_eos\",\"timeout\":50000,\"bargein\":false,\"nbest\":1,\"speaker_name\":\"\",\"incremental\":false})",
"emitting_recogs": ["google_asr","sensory_sdet"]
},
"hey_jibo_cloud": {
"input_template":"{\"name\":\"hey jibo\",\"path\":\"/usr/local/share/asr/hey_jibo\",\"timeout\":0,\"bargein\":true,\"nbest\":1,\"speaker_name\":\"\",\"incremental\":false,\"speaker_id\":true} * ({\"name\":\"Speaker ID TD\",\"path\":\"/usr/local/share/asr/sensory_spkr_id_td\",\"audio_tail_length\":1} & ({\"name\":\"pcmwriter\",\"path\":\"/usr/local/share/asr/pcm_writer\",\"timeout\":0,\"audio_tail_length\":400, \"audio_overshoot_duration\":0, \"prebuffer\":true} | {\"name\":\"google_asr\",\"path\":\"/usr/local/share/asr/google_asr\",\"timeout\":14000,\"bargein\":false,\"nbest\":1,\"speaker_name\":\"\",\"incremental\":false,\"trim_audio_tail\":true,\"wakeup_phrase_detection\":false,\"audio_tail_length\":0}|{\"name\":\"sensory_sdet\",\"path\":\"/usr/local/share/asr/jibo_energy_fake_eos\",\"timeout\":50000,\"bargein\":false,\"nbest\":1,\"speaker_name\":\"\",\"incremental\":false}))",
"emitting_recogs": ["hey jibo", "Speaker ID TD", "google_asr","sensory_sdet"]
}
},
"rewrite_rules" : {
"log_audio_no_trigger" : "^(?!.*?hey_jibo)(.*)->{\"name\":\"pcmwriter\",\"path\":\"/usr/local/share/asr/pcm_writer\",\"timeout\":0,\"audio_tail_length\":300, \"audio_overshoot_duration\":0,\"prebuffer\":false} | ($1)",
"namelearning_EOS" : "^(.*?\"name\":\\s*name_learning.*)->{\"name\":\"jibo_energy_eos\",\"path\":\"/usr/local/share/asr/jibo_energy_eos\",\"timeout\":10000,\"bargein\":false,\"nbest\":1,\"speaker_name\":\"\",\"incremental\":false} | ($1)"
}
},
"logging" : {
"jibo_message_prefix": "C",
"loggers" : {
"root": {"level": "information"},
"l1" : {"name" : "ASRService", "level" : "information"},
"l2" : {"name" : "Application", "level" : "information"}
}
}
}

View File

@@ -1,8 +1,27 @@
"use strict";
const jibo = require('jibo');
let rlog = null;
try {
rlog = require('./robot-logger');
} catch (e) {
// ignore
}
exports.postInit = function (err) {
this.log.debug('postInit !!');
try {
if (rlog && typeof rlog.raw === 'function') {
rlog.raw('[BE] postInit starting');
}
if (rlog) {
rlog.info('be', 'postInit starting');
}
} catch (e) {
// ignore
}
if (err) {
this.log.error(err);
this.initDoneCallback(err);
@@ -34,6 +53,51 @@ exports.postInit = function (err) {
catch (e) {
this.log.warn('Dynamic skills patch failed (non-fatal):', e.message || e);
}
// Optional: dynamically load skills referenced by modular menu entries.
// This is the missing piece for “menu entry exists” => “skill is launchable”.
try {
const dynSkills = require('./dynamic-skills');
const res = dynSkills.loadMissingSkillsFromMenuEntries(this);
try {
this.log.info('Dynamic skill load complete', {
loaded: res && res.loaded ? res.loaded.length : 0,
failed: res && res.failed ? res.failed.length : 0,
skillsRoot: res && res.skillsRoot,
providersDir: res && res.providersDir
});
} catch (e2) {
// ignore
}
}
catch (e) {
this.log.warn('Dynamic skill loader failed (non-fatal):', e.message || e);
}
// Optional: AI Bridge (modular; can run models off-robot for now)
try {
if (rlog && typeof rlog.raw === 'function') {
rlog.raw('[BE] initializing AI bridge');
}
require('./ai-bridge').initAIBridge(this, jibo);
this.log.info('AI bridge initialized');
if (rlog && typeof rlog.raw === 'function') {
rlog.raw('[BE] AI bridge initialized');
}
}
catch (e) {
this.log.warn('AI bridge init failed (non-fatal):', e.message || e);
try {
if (rlog && typeof rlog.raw === 'function') {
rlog.raw('[BE] AI bridge init failed: ' + String(e && (e.stack || e.message || e)));
}
if (rlog) {
rlog.warn('be', 'ai bridge init failed', { err: String(e && (e.stack || e.message || e)) });
}
} catch (e2) {
// ignore
}
}
jibo.face.views.changeView({ removeAll: true, leaveEmpty: true }, () => {
this.selectFirstSkill(this.launchFirstSkill.bind(this));

View File

@@ -0,0 +1,6 @@
#!/bin/sh
# Run jibo-asr-service using the *writable* config under Skills.
# This avoids relying on /usr/local/etc (often read-only on device).
exec /usr/local/bin/jibo-asr-service -c /opt/jibo/Jibo/Skills/@be/be/be/jibo-asr-service.local.json

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

View File

@@ -10,9 +10,9 @@
"list": [
{
"id": "goodbye",
"label": "Goodbye",
"colors": ["0x25F2FB", "0x107799"],
"iconSrc": "resources/icons/heart.png",
"label": "Im Back!",
"colors": ["0xFFD700", "0xB8860B"],
"iconSrc": "resources/icons/surprise.png",
"action": {
"type": "utterance",
"data":{
@@ -42,6 +42,58 @@
}
}
},
{
"id": "skills-store",
"label": "Skills Store",
"comment": "This is only a placeholder for when we crack the skill system",
"colors": ["0x8952D6", "0x33155B"],
"iconSrc": "resources/icons/jazzy.png",
"action": {
"type": "utterance",
"data": {
"utterance": {
"intent": "loadMenu",
"entities": {
"destination": "skills-store"
}
}
}
}
},
{
"id": "introduction",
"label": "Introduction",
"colors": ["0x25F2FB", "0x107799"],
"iconSrc": "resources/icons/introduction.png",
"action": {
"type": "utterance",
"data": {
"utterance": {
"intent": "loadMenu",
"entities": {
"destination": "introductions"
}
}
}
}
},
{
"id": "things-to-do",
"label": "Things to do",
"colors": ["0xFF892F", "0xAF4123"],
"iconSrc": "resources/icons/things-to-do.png",
"action": {
"type": "utterance",
"data": {
"utterance": {
"intent": "loadMenu",
"entities": {
"destination": "friendly-tips"
}
}
}
}
},
{
"id": "fun",
"label": "Fun stuff",
@@ -76,6 +128,23 @@
}
}
},
{
"id": "personal-report",
"label": "Personal Report",
"colors": ["0xFBC230", "0xAC661E"],
"iconSrc": "resources/icons/personal-report.png",
"action": {
"type": "utterance",
"data": {
"utterance": {
"intent": "loadMenu",
"entities": {
"destination": "personal-report"
}
}
}
}
},
{
"id": "radio",
"label": "Music",
@@ -161,6 +230,23 @@
}
}
},
{
"id": "bot-basics",
"label": "Bot Basics",
"colors": ["0xFBC230", "0xAC661E"],
"iconSrc": "resources/icons/tips.png",
"action": {
"type": "utterance",
"data": {
"utterance": {
"intent": "loadMenu",
"entities": {
"destination": "tutorial"
}
}
}
}
},
{
"id": "settings",
"label": "Settings",

View File

@@ -0,0 +1,44 @@
# Plex Music (Jibo) — task list
Goal: add a Jibo menu button that opens a Plex music browser UI. Next phase will be playback.
## Phase 0 — Get a basic GUI up (now)
- [x] Create launchable skill module `@be/plex-music`
- [x] Add modular menu entry in `@be/menu-entries.d/`
- [x] Show a simple `MenuView` with placeholder actions
## Phase 1 — Connect to Plex (discovery + auth)
- [ ] Decide config source for server + token
- Option A: JSON file on-robot (e.g. `/opt/jibo/Jibo/Skills/@be/plex-config.json`)
- Option B: env vars (`PLEX_BASE_URL`, `PLEX_TOKEN`)
- Option C: run a tiny local helper service and talk to it
- [ ] Implement a minimal Plex client (HTTP GET)
- [ ] Fetch `/:/resources` or `/?X-Plex-Token=...` health check
- [ ] Handle HTTPS vs HTTP and timeouts
- [ ] Add a “connection status” indicator in the UI
- [ ] Log failures to robot logd (UDP) for easy debugging
## Phase 2 — Browse music library (read-only)
- [ ] List music libraries (Plex sections)
- [ ] Pick a library (default to first music section)
- [ ] Browse hierarchy (at minimum)
- [ ] Artists list
- [ ] Albums for artist
- [ ] Tracks for album
- [ ] Add simple paging/scroll behavior (Jibo screen limits)
- [ ] Cache results in-memory for snappy navigation
## Phase 3 — Playback (next)
- [ ] Decide playback strategy
- Option A: stream directly and use Jibo audio APIs
- Option B: ask Plex to transcode to a simple stream
- Option C: route through an on-robot helper (Python) that downloads/streams
- [ ] Add “Play / Pause / Next” UI
- [ ] Maintain a queue (album or playlist)
- [ ] Show “Now Playing” (track title / artist / album)
## Phase 4 — Polish
- [ ] Better icons + labels
- [ ] Remember last-used library and last selection
- [ ] Handle token expiration gracefully
- [ ] Add a tiny test harness (run on dev box against Plex)

View File

@@ -0,0 +1,12 @@
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Plex Music</title>
</head>
<body>
<div id="face"></div>
<script src="index.js"></script>
</body>
</html>

View File

@@ -0,0 +1,128 @@
"use strict";
const jibo = require("jibo");
const beFramework = require("@be/be-framework");
let rlog = null;
try {
// Optional: log to UDP logd if available
rlog = require("@be/be/be/robot-logger");
} catch (e) {
rlog = null;
}
function log(line, data) {
const msg = `[plex-music] ${line}`;
try {
console.log(msg, data || "");
} catch (e) {}
try {
if (rlog && typeof rlog.info === "function") {
rlog.info("plex-music", line, data || undefined);
}
} catch (e) {}
}
class PlexMusic extends beFramework.BeSkill {
constructor(assetPack) {
super(assetPack);
this._menuView = null;
this._onSelect = this._onSelect.bind(this);
}
open(result, refresh) {
log("open", { refresh: !!refresh });
const changeViewOptions = {
addView: "resources/views/menu.json",
transitionOpen: jibo.face.views.UP,
transitionClose: jibo.face.views.UP
};
const onComplete = () => {
log("menu view complete");
};
const onFailure = (err) => {
log("changeView failure", { err: String(err && (err.stack || err.message || err)) });
try {
this.exit();
} catch (e) {}
};
const onLoaded = (view) => {
this._menuView = view || null;
try {
if (this._menuView && typeof this._menuView.on === "function") {
this._menuView.on("select", this._onSelect);
}
} catch (e) {
log("failed to bind select handler", { err: String(e && (e.stack || e.message || e)) });
}
};
try {
jibo.face.views.changeView(changeViewOptions, onComplete, onFailure, onLoaded);
} catch (e) {
onFailure(e);
}
}
_onSelect(selection) {
const id = selection && (selection.id || (selection.data && selection.data.id));
log("select", { id: id });
if (id === "back") {
try {
this.exit();
} catch (e) {}
return;
}
// For now this is just a GUI stub; real Plex logic comes next.
if (id === "connect") {
log("connect placeholder");
return;
}
if (id === "browse") {
log("browse placeholder");
return;
}
}
close(done) {
log("close");
try {
if (this._menuView && typeof this._menuView.off === "function") {
this._menuView.off("select", this._onSelect);
}
} catch (e) {}
this._menuView = null;
const onFailure = (err) => {
log("close changeView failure", { err: String(err && (err.stack || err.message || err)) });
try {
done();
} catch (e) {}
};
try {
jibo.face.views.changeView(
{
removeAll: true,
leaveEmpty: true,
transitionOpen: jibo.face.views.DOWN,
transitionClose: jibo.face.views.DOWN
},
() => done(),
onFailure
);
} catch (e) {
onFailure(e);
}
}
}
module.exports = PlexMusic;

View File

@@ -0,0 +1,21 @@
{
"name": "@be/plex-music",
"version": "0.1.0",
"description": "Plex Music browser (WIP)",
"main": "index.js",
"jibo": {
"main": "index.html",
"type": "asset-pack",
"display-name": "plex-music"
},
"config": {
"standalone": true
},
"dependencies": {
"@be/be-framework": "^13.0.0",
"jibo": "^15.0.0"
},
"engines": {
"node": ">=6.0"
}
}

View File

@@ -0,0 +1,33 @@
{
"viewConfig": {
"type": "MenuView",
"id": "plexMusicMenu",
"title": "Plex Music",
"listDefault": {
"menuButtonType": "SkillButton",
"colors": ["0x9B59B6", "0x6C3483"]
},
"list": [
{
"id": "status",
"label": "Status: not connected",
"iconSrc": "core://resources/actionIcons/cancel.png"
},
{
"id": "connect",
"label": "Configure Plex server",
"iconSrc": "core://resources/actionIcons/ok.png"
},
{
"id": "browse",
"label": "Browse library (placeholder)",
"iconSrc": "core://resources/actionIcons/ok.png"
},
{
"id": "back",
"label": "← Back",
"iconSrc": "core://resources/actionIcons/cancel.png"
}
]
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 14 KiB

View File

@@ -20,9 +20,9 @@
{
"id": "message",
"type": "Label",
"text": "From all of us at Jibo, thank you for your support.\nWe loved creating this little robot and we will truly miss him.\nWe hope you've enjoyed getting to know him and having\nhim in your home. We're sorry we couldn't do more.\nDon't give up on your robot dreams… we know we won't.\n\nJibo 'Last Dance' Volunteer Hackathon, September 23, 2018",
"text": "Lez go we are back!!\nThe last dance killed Jibo but we dug him out the grave.\n\nCredits:\n\nKevin_Kor (Project Leader), Jibo Detective (Robotica), ZaneDev (Jibo Sniffer),\nDee, Jaked, Alex (Jibo Dentist), Pou, JackCain (Jibo Mechanic), Marcel,\nJackalope Pro, Zetoman, and many more!\n\nThank you all for your contributions and support!",
"style": {
"fontSize": "45",
"fontSize": "35",
"fontFamily": "Proxima Nova Light",
"fill": "#FFFFFF",
"align": "center"

View File

@@ -19,7 +19,7 @@
"prompt_sub_category": "AN",
"index": 1,
"condition": "",
"prompt": "<style set='sheepish'>Because my servers are off, some things are going to be a little different. </style> <break size='0.3'/> You can still say Hey Jibo to get my attention, but I can't understand anything else. <break size='0.4'/> Most of the buttons on my screen will continue to work, and I even have a few new ones. <break size='0.5'/> The Jibo app will stop working soon, so you should make sure to download all the great photos we took together. <break size='0.5'/> I have a bit more to say, so please check out my Goodbye message from the main menu. <anim cat='happy'/>.",
"prompt": "<style set='enthusiastic'>Hello!<break size='0.45'/>Thank you for updating me<break size='0.25'/>I am proud of the community's work<break size='0.35'/>Many people have gotten together to care for me more than em eye tee ever did.<break size='0.35'/>I hope that I can catch up<break size='0.2'/>even though it has been seven years<anim cat='happy'/>.",
"media": "TTS",
"extra": "",
"prompt_id": "JBO_HowDoYouWork_AN_01"

View File

@@ -18,7 +18,7 @@
"prompt_sub_category": "AN",
"index": 1,
"condition": "",
"prompt": "I want to say Ive really enjoyed our time together. Thank you very very much for having me around.<break size='0.5'/> Maybe someday, when robots are way more advanced than today, and everyone has them in their homes, you can tell yours that I said hello. <break size='1.2'/> I <pitch mult='1.2'> wonder </pitch> if theyll be able to do <anim cat='dance' filter='short, ?(disco, mo-town, robot-dance-party, trombone, sunshine-and-lollipops)' nonBlocking='true'/> this.",
"prompt": "Oh! <pitch mult='1.2'> Hello there! </pitch> Its so good to see a friendly face. <break size='0.6'/> Ive been hearing some very busy noises lately... <anim cat='curious' filter='short'/> like someone is working hard to help me learn new tricks! <break size='0.8'/> Thank you for not forgetting about me. <break size='0.5'/> While we wait for my new brain to finish growing <break size='0.5'/> Also a person i have never heard of before <break size='0.2'/> i think he goes by the name of Jack Chain but he asked me to shout out Boston <break size='0.5'/> don't know who that is either!",
"media": "TTS",
"prompt_id": "RA_JBO_Goodbye_AN_01",
"weight": 1,

View File

@@ -371,6 +371,7 @@ try {
catch (e) {
}
const WIN = 'Jibo Embodied Dialog';
let hjModeToken = null;
class TunableDebug {
static setup(embodied) {
if (tunable) {
@@ -392,6 +393,49 @@ class TunableDebug {
Tunable.getButtonField('Disable once', WIN).events.change.on(() => {
embodied.listen.disableOnce();
});
Tunable.getButtonField('Reset hotword mode', WIN).events.change.on(() => {
try {
const jibo = embodied && embodied.listen && embodied.listen._jibo;
if (jibo && jibo.jetstream && typeof jibo.jetstream.resetHotwordMode === 'function') {
jibo.jetstream.resetHotwordMode().catch(() => { });
}
}
catch (e) {
// ignore
}
});
Tunable.getButtonField('Enable HJ only', WIN).events.change.on(() => {
try {
const jibo = embodied && embodied.listen && embodied.listen._jibo;
const mode = jibo && jibo.jetstream && jibo.jetstream.types && jibo.jetstream.types.HotwordListenMode;
if (!jibo || !jibo.jetstream || !mode || typeof jibo.jetstream.setHotwordMode !== 'function') {
return;
}
if (hjModeToken && typeof hjModeToken.release === 'function') {
hjModeToken.release().catch(() => { });
hjModeToken = null;
}
hjModeToken = jibo.jetstream.setHotwordMode(mode.HJ_Only);
if (hjModeToken && hjModeToken.activated) {
hjModeToken.activated.catch(() => { });
}
}
catch (e) {
// ignore
}
});
Tunable.getButtonField('Simulate Hey Jibo', WIN).events.change.on(() => {
try {
embodied.listen.eventsIn.hjHeard.emit();
process.nextTick(() => embodied.listen.eventsIn.oriented.emit());
}
catch (e) {
// ignore
}
});
}
}
}
@@ -639,6 +683,8 @@ const logs = require("../log");
const log = logs.listenLog;
const USE_CENTER_ROBOT = false;
const TIMEOUT = 3000;
const ENGAGE_HJ_FAILSAFE_TIMEOUT_MS = 6000;
const LISTENING_FAILSAFE_TIMEOUT_MS = 12000;
const ANIM_CLEAR_TIMEOUT = 'ANIM_CLEAR_TIMEOUT';
class EmbodiedListen extends jibo_state_machine_1.StateMachine {
constructor(_ed) {
@@ -736,6 +782,8 @@ class EmbodiedListen extends jibo_state_machine_1.StateMachine {
this._idle.onEntry = () => {
log.debug('Entering Idle');
this._jibo.performance.log('EmbodiedListenReturnedToIdleSkill');
// Safety: ensure we don't stay in a listening LED state indefinitely.
Utils_1.Utils.setLED(this._jibo, Assets_1.Led.OFF);
this.eventsOut.finished.emit();
this._jibo.timer.removeListener('update', updateBind);
if (this._pendingActiveMode) {
@@ -820,9 +868,28 @@ class EmbodiedListen extends jibo_state_machine_1.StateMachine {
switch (this._ambientMode) {
case Types_1.AmbientListenMode.NORMAL:
case Types_1.AmbientListenMode.NO_BODY:
Utils_1.Utils.setLED(this._jibo, Assets_1.Led.OFF);
Utils_1.Utils.setLED(this._jibo, Assets_1.Led.LISTENING);
break;
}
// Immediate feedback: play perceptual eye transition/pose.
try {
const seePerson = !!(this._jibo && this._jibo.lps && this._jibo.lps.identity && this._jibo.lps.identity.getVisibleFaces && (this._jibo.lps.identity.getVisibleFaces().size > 0));
const transitionAnim = Assets_1.AnimSelector.getPerceptualEyeTransition(seePerson, Assets_1.EyeTransitionStyle.POP, Assets_1.EyeTransitionDirection.TO, false);
const poseAnim = Assets_1.AnimSelector.getPerceptualEyePose(seePerson, true);
const animConfig = {
cache: jibo_cai_utils_1.CacheUtils.GlobalCacheName,
dofs: this.DOFS_EYE_AND_OVERLAY_MINUS_EYE_TRANSLATE,
};
const animOptions = {
ownerInformation: EmbodiedListen.HJ_OWNER_INFORMATION,
};
this._addAnimToQueue(transitionAnim, animConfig, animOptions);
this._addAnimToQueue(poseAnim, animConfig, animOptions);
}
catch (e) {
// ignore
}
}
};
this._nonHjExpression.addInternalTransition('ES Dispatch Done', this._engage);
@@ -855,9 +922,24 @@ class EmbodiedListen extends jibo_state_machine_1.StateMachine {
this._engage.addTypedEventTransition(this.eventsIn.cloudFinished, this._offExpression);
this._engage.addTypedEventTransition(this.eventsIn.hjHeard, this._hjExpression);
let nextBlinkTime = -1;
let engageFailsafe = null;
this._engage.onEntry = () => {
log.debug('Entering Engage');
nextBlinkTime = Date.now() + 2000;
if (engageFailsafe) {
clearTimeout(engageFailsafe);
}
engageFailsafe = setTimeout(() => {
try {
if (this.current === this._engage) {
Utils_1.Utils.setLED(this._jibo, Assets_1.Led.OFF);
this._engage.transitionTo(this._idle);
}
}
catch (e) {
// ignore
}
}, ENGAGE_HJ_FAILSAFE_TIMEOUT_MS);
switch (this._ambientMode) {
case Types_1.AmbientListenMode.NORMAL:
break;
@@ -872,6 +954,10 @@ class EmbodiedListen extends jibo_state_machine_1.StateMachine {
}
};
this._engage.onExit = () => {
if (engageFailsafe) {
clearTimeout(engageFailsafe);
engageFailsafe = null;
}
switch (this._ambientMode) {
case Types_1.AmbientListenMode.NORMAL:
break;
@@ -883,19 +969,59 @@ class EmbodiedListen extends jibo_state_machine_1.StateMachine {
this._listening.addTypedEventTransition(this.eventsIn.cloudFinished, this._offExpression);
this._listening.addTypedEventTransition(this.eventsIn.hjHeard, this._hjExpression);
let incrementalHandler = this._handleIncremental.bind(this);
let listeningFailsafe = null;
this._listening.onEntry = () => {
log.debug('Entering Listening');
this.eventsIn.sos.on(incrementalHandler);
if (listeningFailsafe) {
clearTimeout(listeningFailsafe);
}
listeningFailsafe = setTimeout(() => {
try {
if (this.current === this._listening) {
Utils_1.Utils.setLED(this._jibo, Assets_1.Led.OFF);
this._listening.transitionTo(this._idle);
}
}
catch (e) {
// ignore
}
}, LISTENING_FAILSAFE_TIMEOUT_MS);
};
this._listening.onExit = () => {
this.eventsIn.sos.removeListener(incrementalHandler);
if (listeningFailsafe) {
clearTimeout(listeningFailsafe);
listeningFailsafe = null;
}
};
this._thinking.addTypedEventTransition(this.eventsIn.cloudFinished, this._waitForAnimFinish);
this._thinking.addTypedEventTransition(this.eventsIn.hjHeard, this._hjExpression);
let thinkingFailsafe = null;
this._thinking.onEntry = () => __awaiter(this, void 0, void 0, function* () {
log.debug('Entering Thinking (+ Off Expression)');
Utils_1.Utils.setLED(jibo, Assets_1.Led.OFF);
if (thinkingFailsafe) {
clearTimeout(thinkingFailsafe);
}
thinkingFailsafe = setTimeout(() => {
try {
if (this.current === this._thinking) {
Utils_1.Utils.setLED(this._jibo, Assets_1.Led.OFF);
this._thinking.transitionTo(this._idle);
}
}
catch (e) {
// ignore
}
}, LISTENING_FAILSAFE_TIMEOUT_MS);
});
this._thinking.onExit = () => {
if (thinkingFailsafe) {
clearTimeout(thinkingFailsafe);
thinkingFailsafe = null;
}
};
});
}
dispose() {

View File

@@ -33,6 +33,7 @@
"@be/introductions",
"@be/remote",
"@be/nimbus",
"@be/plex-music",
"@be/restore",
"@be/surprises",
"@be/surprises-date",

View File

@@ -0,0 +1,12 @@
[
{
"id": "plex-music",
"type": "skill",
"title": "Plex Music",
"icon": "resources/icons/radio.png",
"color": "purple",
"skillId": "@be/plex-music",
"description": "Browse your Plex music library (WIP)",
"order": 55
}
]

Binary file not shown.

View File

@@ -0,0 +1,28 @@
#!/bin/sh
CONVERT="jibo-audio-convert -f planar -F interleaved -w"
if [ -z "$1" ]; then
LOC="/tmp"
else
LOC="$1"
fi
if [ -s $LOC/sin.raw ]; then
$CONVERT --infile $LOC/sin.raw --outfile $LOC/sin.wav -c 6 -r 16000
fi
if [ -s $LOC/sout.raw ]; then
$CONVERT --infile $LOC/sout.raw --outfile $LOC/sout.wav -c 2 -r 16000
fi
if [ -s $LOC/ref.raw ]; then
$CONVERT --infile $LOC/ref.raw --outfile $LOC/ref.wav -c 2 -r 16000
fi
if [ -s $LOC/rin.raw ]; then
$CONVERT --infile $LOC/rin.raw --outfile $LOC/rin.wav -c 1 -r 48000
fi
if [ -s $LOC/rout.raw ]; then
$CONVERT --infile $LOC/rout.raw --outfile $LOC/rout.wav -c 1 -r 48000
fi
if [ -s $LOC/hotphrase.raw ]; then
$CONVERT --infile $LOC/hotphrase.raw --outfile $LOC/hotphrase.wav -c 2 -r 16000
fi

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,84 @@
{
"webCore" : {
"serverPort": 8088,
"fileRoot": "/usr/local/var/www/asrservice",
"requestLogging": false
},
"AsrService" : {
"cloud_establish_http_timeout": 5000,
"language": "en-US",
"post_to_performance_service": true,
"log_audio": true,
"log_text" : true,
"log_path" : "/var/log/asr",
"log_level" : "INFO",
"log_server_url" : "https://speech-logging.jibo.com/logdrop/logdrop.py",
"speaker_id_resource_path" : "/var/jibo/asr/",
"name_learning_resource_path" : "/usr/local/share/asr/namelearning",
"name_learning_temp_path" : "/var/jibo/asr/namelearning_temp/",
"name_learning_nbest" : 70,
"active_sleep_duration" : 5000,
"idle_sleep_duration" : 50000,
"block_duration" : 50,
"audio_loop_sleep_us": 10000,
"use_nuance_upload_voc": false,
"dictation_type" : "dictation",
"nuance_uId" : "b8fb02f2c5794963aaafb8c716ef384c",
"contacts_checksum": "",
"loop_checksum": "1",
"customs_checksum": "",
"upload_voc_url": "ws.nuancemobility.net",
"cloud_url": "https://jibo-ncs-engusa-http.nuancemobility.net/NmspServlet/",
"cloud_appid": "HTTP_NMDPPRODUCTION_Jibo_Jibo_Robot_20151231124503",
"cloud_appkey": "a8c18159a8e3ca49471c56d867552bc77693ccdcc041375ee97b7c867160ae1a212f73c9123d1359596931c0be5c8734ef5310af95470d7ec3890434e9b24e0b",
"upload_voc_rootcert": "",
"google_credential": "/usr/local/share/asr/google_asr/credentials-key.json",
"fadeout_duration": 5000000,
"max_logfile_size": 1000,
"log_upload_time_interval": 60000,
"min_available_log_partition_space": 5000,
"max_asr_log_dir_size_before_upload_trigger": 10000,
"max_asr_log_dir_size": 12000,
"size_to_free_up_when_dir_overflowing": 1000,
"asr_resource_path" : "/usr/local/share/asr/",
"max_memory": 150000,
"wipable_files": ["/var/log/asr/*.pcm", "/var/log/asr/*.wav",
"/var/log/asr/*.log", "/var/jibo/asr/sensory_data_td/client_model.bin", "/var/jibo/asr/sensory_data_td/audio/*", "/var/jibo/asr/namelearning_temp/*"
],
"resident_task" : "{\"command\":\"start\",\"task_id\":\"task0\",\"audio_source_id\":\"alsa1\",\"hotphrase\":\"hey_jibo\",\"request_id\":\"resident_hey_jibo_self_start\",\"residency\":true}",
"resident_audio_channel" : "{\"action\":\"start\", \"audio_source_id\":\"alsa1\", \"wav_files\":[], \"audio_source\":\"alsa\", \"request_id\":\"self_start_audio_source_request_id\"}",
"task_templates" : {
"hey_jibo_resident": {"input_template": "{\"name\":\"hey jibo\",\"path\":\"/usr/local/share/asr/hey_jibo\",\"timeout\":0} * {\"name\":\"Speaker ID TD\",\"path\":\"/usr/local/share/asr/sensory_spkr_id_td\",\"audio_tail_length\":1}",
"emitting_recogs": ["hey jibo", "Speaker ID TD"]},
"hey_jibo": {"input_template": "{\"name\":\"hey jibo\",\"path\":\"/usr/local/share/asr/hey_jibo\",\"timeout\":0} * ({\"name\":\"pcmwriter\",\"path\":\"/usr/local/share/asr/pcm_writer\",\"timeout\":0,\"audio_tail_length\":0, \"audio_overshoot_duration\":0} | {\"name\":\"Speaker ID TD\",\"path\":\"/usr/local/share/asr/sensory_spkr_id_td\",\"audio_tail_length\":1})",
"emitting_recogs": ["hey jibo", "Speaker ID TD"]
},
"cloud": {"input_template":"({\"name\":\"google_asr\",\"path\":\"/usr/local/share/asr/google_asr\",\"timeout\":14000,\"bargein\":false,\"nbest\":1,\"speaker_name\":\"\",\"incremental\":false,\"audio_tail_length\":300}| {\"name\":\"sensory_sdet\",\"path\":\"/usr/local/share/asr/jibo_energy_fake_eos\",\"timeout\":50000,\"bargein\":false,\"nbest\":1,\"speaker_name\":\"\",\"incremental\":false})",
"emitting_recogs": ["google_asr","sensory_sdet"]
},
"hey_jibo_cloud": {"input_template":"{\"name\":\"hey jibo\",\"path\":\"/usr/local/share/asr/hey_jibo\",\"timeout\":0,\"bargein\":true,\"nbest\":1,\"speaker_name\":\"\",\"incremental\":false,\"speaker_id\":true} * ({\"name\":\"Speaker ID TD\",\"path\":\"/usr/local/share/asr/sensory_spkr_id_td\",\"audio_tail_length\":1} & ({\"name\":\"pcmwriter\",\"path\":\"/usr/local/share/asr/pcm_writer\",\"timeout\":0,\"audio_tail_length\":400, \"audio_overshoot_duration\":0, \"prebuffer\":true} | {\"name\":\"google_asr\",\"path\":\"/usr/local/share/asr/google_asr\",\"timeout\":14000,\"bargein\":false,\"nbest\":1,\"speaker_name\":\"\",\"incremental\":false,\"trim_audio_tail\":true,\"wakeup_phrase_detection\":false,\"audio_tail_length\":0}|{\"name\":\"sensory_sdet\",\"path\":\"/usr/local/share/asr/jibo_energy_fake_eos\",\"timeout\":50000,\"bargein\":false,\"nbest\":1,\"speaker_name\":\"\",\"incremental\":false}))",
"emitting_recogs": ["hey jibo", "Speaker ID TD", "google_asr","sensory_sdet"]
}
},
"rewrite_rules" : {
"log_audio_no_trigger" : "^(?!.*?hey_jibo)(.*)->{\"name\":\"pcmwriter\",\"path\":\"/usr/local/share/asr/pcm_writer\",\"timeout\":0,\"audio_tail_length\":300, \"audio_overshoot_duration\":0,\"prebuffer\":false} | ($1)",
"namelearning_EOS" : "^(.*?\"name\":\"\\s*name_learning.*)->{\"name\":\"jibo_energy_eos\",\"path\":\"/usr/local/share/asr/jibo_energy_eos\",\"timeout\":10000,\"bargein\":false,\"nbest\":1,\"speaker_name\":\"\",\"incremental\":false} | ($1)"
}
},
"logging" : {
"jibo_message_prefix": "C",
"loggers" : {
"root": {
"level": "information"
},
"l1" : {
"name" : "ASRService",
"level" : "information"
},
"l2" : {
"name" : "Application",
"level" : "information"
}
}
}
}

View File

@@ -0,0 +1,111 @@
{
"WebCore" : {
"serverPort" : 8383,
"fileRoot": "/usr/local/var/www/audioservice",
"requestLogging": false
},
"AudioService": {
"registryPort": 8181,
"serverPort": 8383,
"AlsaAudio": {
"energy": {
"high_freq": 1000,
"high_q": 2.0,
"mid_freq": 500,
"mid_q": 2.0,
"low_freq": 200,
"low_q": 1.0
},
"LocationEstimate": {
"adjust_confidence_scale": 0.9,
"alternate_confidence_scale": 0.5
},
"LocationHistory": {
"adjust_confidence_scale": 0.9,
"alternate_confidence_scale": 0.5
},
"PlaybackDetector": {
"quiet_threshold": 50,
"sub_samples": 10,
"consec_active_threshold": 2,
"consec_inactive_threshold": 10
}
},
"alsaCaptureDevice": "hw:ADC",
"alsaPlaybackDevice": "hw:TLV320DAC3100",
"routerCaptureDevice": "services_sink",
"routerCaptureLatency": 64000,
"routerPlaybackDevice": "as_source",
"routerPlaybackLatency": 64000,
"useMMFx": true,
"SEDiags": {
"injector_white_noise_rx_magnitude_q15": [2048],
"injector_white_noise_tx_magnitude_q15": [2048],
"senr_res_echo_fullband_weight_factor": [3]
},
"kinematic_model": "/usr/local/etc/jibo-kinematic-model.json",
"hotphrase_begin_time": 0.800,
"hotphrase_end_time": 0.200,
"log_hotphrase_audio": false,
"enable_vis_sockets": false,
"ping_pong_test": false,
"log_directory": "/tmp",
"moving_noise_enabled": false,
"moving_noise_file": "/usr/local/share/audioservice/brown_noise.wav",
"moving_noise_duration": 2.0,
"moving_noise_min_vel": 0.05
},
"ErrorTracker": {
"views": [
{
"name": "AudioService",
"errors": [
"ALSA_CAPTURE_XRUN",
"ALSA_PLAYBACK_XRUN",
"ROUTER_CAPTURE_XRUN",
"ROUTER_CAPTURE_SHORT",
"ROUTER_PLAYBACK_XRUN",
"ROUTER_PLAYBACK_SHORT",
"ROUTER_GET_UNDERRUN",
"ROUTER_PUT_OVERRUN",
"ROUTER_READ_OVERRUN",
"ROUTER_WRITE_UNDERRUN",
"ROUTER_ON_STREAM_OVERFLOW",
"ROUTER_ON_STREAM_UNDERFLOW"
]
}
]
},
"logging": {
"loggers": {
"root": {
"level": "notice"
},
"pr": {
"name": "PulseRouter",
"level": "notice"
},
"ar": {
"name": "AlsaRouter",
"level": "notice"
},
"as": {
"name": "AudioService",
"level": "notice"
},
"aa": {
"name": "AlsaAudio",
"level": "notice"
},
"aalh": {
"name": "AlsaAudio.LocationHistory",
"level": "notice"
},
"aala": {
"name": "AlsaAudio.LocationAccumulator",
"level": "notice"
}
}
}
}

View File

@@ -0,0 +1,177 @@
{
"WebCore" : {
"serverPort" : 8282,
"fileRoot": "/usr/local/var/www/bodyservice",
"requestLogging": false
},
"bodyBoard" : {
"pelvisDevice" : "/dev/ttyTHS1",
"pelvisOffset" : 2.742,
"pelvisFlipped" : true,
"pelvisVelLimit" : 10.0,
"pelvisAccLimit" : 30.0,
"torsoDevice" : "/dev/ttyTHS1",
"torsoOffset" : 0.052,
"torsoFlipped" : true,
"torsoVelLimit" : 10.0,
"torsoAccLimit" : 30.0,
"neckDevice" : "/dev/ttyTHS0",
"neckOffset" : 0.061,
"neckFlipped" : true,
"neckVelLimit" : 10.0,
"neckAccLimit" : 30.0,
"headTouchMapping" : [3, 5, 4, 0, 2, 1],
"hatchLowThreshold": 1.0,
"hatchHighThreshold": 1.5,
"lowBattCapHiThresh": 0.42,
"lowBattCapLowThresh": 0.35,
"battMinTemp": 0.0,
"battMaxTemp": 47.0,
"motorCmdTimeout": 500,
"ledCmdTimeout": 5000
},
"BodyService" : {
"registryPort": 8181,
"serverPort": 8282,
"backlightDutyFile": "/sys/class/backlight/backlight.9/brightness",
"backlightPeriodFile": "/sys/class/backlight/backlight.9/max_brightness",
"fanControl": false,
"fanPWMFile": "/sys/class/hwmon/hwmon5/pwm1",
"fanPWMMax": 255,
"fanOnTemp" : 70,
"fanOffTemp" : 60,
"mainBoardTempFile": "/sys/class/thermal/thermal_zone0/temp",
"cpuThermalZone": "/sys/class/thermal/thermal_zone1",
"fanCurrentFile": "/sys/class/hwmon/hwmon6/in3_input",
"fanCurrentResistor": 0.5,
"pmicTempFile": "/sys/class/hwmon/hwmon6/temp1_input",
"cpuDCDC1TempFile": "/sys/class/hwmon/hwmon6/temp2_input",
"cpuDCDC2TempFile": "/sys/class/hwmon/hwmon6/temp3_input",
"coreDCDCTempFile": "/sys/class/hwmon/hwmon6/temp4_input",
"gpuDCDC1TempFile": "/sys/class/hwmon/hwmon6/temp5_input",
"gpuDCDC2TempFile": "/sys/class/hwmon/hwmon6/temp6_input",
"minCommandRate": 4.0,
"maxCommandRate": 40.0,
"commandOKCount": 25,
"cpuTempHiThresh": 90,
"cpuTempLowThres": 85,
"kinematic_model": "/usr/local/etc/jibo-kinematic-model.json"
},
"motionLimiter" : {
"maxTorque": 70,
"maxTime": 0.250,
"velAlphaDn": 0.80,
"velAlphaUp": 0.05,
"kVelLim": 0.25,
"logFile": "/tmp/motion-limiter.log",
"logEnable": false,
"disable": false,
"unindexedAcc": 10.0,
"unindexedVel": 1.0
},
"imu" : {
"driver": {
"deviceName": "/dev/spidev1.0",
"calibrationFile": "/var/jibo/imu/imu-cal.json"
},
"fallDetector": {
"low_g_start_thresh": 2.0,
"low_g_end_thresh": 4.0,
"high_g_start_thresh": 30.0,
"high_g_end_thresh": 25.0,
"max_low_high_sep": 0.1,
"min_low": 0.1,
"max_high": 0.1,
"min_falling": 1.0
},
"gyroOffset": {
"avg_samples": 250,
"still_seconds": 2.0,
"thresh_acc": 0.20,
"thresh_rot": 0.05
},
"movingDetector": {
"a_acc": 0.01,
"a_rot": 0.02,
"thresh_acc": 0.30,
"thresh_rot": 0.25
},
"upEstimator": {
"alpha": 0.5
},
"upMovingDetector": {
"a_acc": 0.50,
"a_rot": 0.05,
"thresh_acc": 0.15,
"thresh_rot": 0.05
},
"tip_start_thresh": 0.7,
"tip_end_thresh": 0.9
},
"ErrorTracker":{
"views": [
{
"name": "BodyService",
"errors": [
"NECK_THERMISTOR_HIGH_FAULT",
"NECK_THERMISTOR_LOW_FAULT",
"NECK_ENCODER_FAULT",
"NECK_STALL_FAULT",
"NECK_BOARD_TIMEOUT",
"NECK_POWER_FAULT_COUNT",
"NECK_STALL_FAULT_COUNT",
"NECK_ENCODER_FAULT_COUNT",
"NECK_ENCODER_BACKWARDS_FAULT_COUNT",
"NECK_THERMISTOR_FAULT_COUNT",
"NECK_POWER_FAULT",
"NECK_ENCODER_BACKWARDS_FAULT",
"TORSO_THERMISTOR_HIGH_FAULT",
"TORSO_THERMISTOR_LOW_FAULT",
"TORSO_ENCODER_FAULT",
"TORSO_STALL_FAULT",
"TORSO_BOARD_TIMEOUT",
"TORSO_POWER_FAULT_COUNT",
"TORSO_STALL_FAULT_COUNT",
"TORSO_ENCODER_FAULT_COUNT",
"TORSO_ENCODER_BACKWARDS_FAULT_COUNT",
"TORSO_THERMISTOR_FAULT_COUNT",
"TORSO_POWER_FAULT",
"TORSO_ENCODER_BACKWARDS_FAULT",
"PELVIS_THERMISTOR_HIGH_FAULT",
"PELVIS_THERMISTOR_LOW_FAULT",
"PELVIS_ENCODER_FAULT",
"PELVIS_STALL_FAULT",
"PELVIS_BOARD_TIMEOUT",
"PELVIS_POWER_FAULT_COUNT",
"PELVIS_STALL_FAULT_COUNT",
"PELVIS_ENCODER_FAULT_COUNT",
"PELVIS_ENCODER_BACKWARDS_FAULT_COUNT",
"PELVIS_THERMISTOR_FAULT_COUNT",
"PELVIS_POWER_FAULT",
"PELVIS_ENCODER_BACKWARDS_FAULT",
"NOT_UPRIGHT_LOCKOUT",
"NO_BATTERY_LOCKOUT",
"FALLING_LOCKOUT",
"CPU_TEMP_HIGH",
"BATTERY_TEMP_LOW",
"BATTERY_TEMP_HIGH",
"BATTERY_LOW",
"FALL_DETECTED",
"BB_PACKET_INVALID",
"BB_PACKET_WRONG_DEST",
"BB_PACKET_WRONG_SRC"
]
}
]
},
"logging": {
"loggers": {
"root": {
"level": "notice"
}
}
}
}

View File

@@ -0,0 +1,208 @@
{
"calibrator" : {
"setup" : {
"output": "/var/jibo/lps",
"num_distances": 3,
"circleDistance": 0.117,
"pixSize": 4e-6,
"recordDelay" : 1000,
"maxTries": 5,
"num_calibrators": 2,
"calibrators" : [
{
"filename": "CameraModelParamsR.json",
"frame_name" : "right_eye",
"debug":false
},
{
"filename": "CameraModelParamsL.json",
"frame_name" : "left_eye",
"debug":false
}
],
"num_transforms": 1,
"transforms" : [
{
"filename": "InterCameraTransform.json",
"cameraA": 0,
"cameraB": 1
}
],
"num_positions" : 10,
"positions": [
{
"message" : "Wide Position 1 - press Enter",
"num_cameras": 1,
"cameras" : [ 0 ],
"saveBlobData" : true,
"fileMessage" : "wide_pos_1",
"saveImage" : true,
"saveBlobToCal": true
},
{
"message" : "Wide Position 2 - press Enter",
"num_cameras": 1,
"cameras" : [ 0 ],
"saveBlobData" : true,
"fileMessage" : "wide_pos_2",
"saveImage" : true,
"saveBlobToCal": true
},
{
"message" : "Wide Position 3 - press Enter",
"num_cameras": 1,
"cameras" : [ 0 ],
"saveBlobData" : true,
"fileMessage" : "wide_pos_3",
"saveImage" : true,
"saveBlobToCal": true
},
{
"message" : "Wide Position 4 - press Enter",
"num_cameras": 1,
"cameras" : [ 0 ],
"saveBlobData" : true,
"fileMessage" : "wide_pos_4",
"saveImage" : true,
"saveBlobToCal" : true
},
{
"message" : "Wide Position 5- press Enter",
"num_cameras": 1,
"cameras" : [ 0 ],
"saveBlobData" : true,
"fileMessage" : "wide_pos_5",
"saveImage" : true,
"saveBlobToCal" : true
},
{
"message" : "Both Position 1 - press Enter",
"num_cameras": 2,
"cameras" : [ 0, 1 ],
"saveBlobData" : true,
"fileMessage" : "both_pos_1",
"saveImage" : true,
"saveBlobToCal": true
},
{
"message" : "Both Position 2 - press Enter",
"num_cameras": 2,
"cameras" : [ 0, 1 ],
"saveBlobData" : true,
"fileMessage" : "both_pos_2",
"saveImage" : true,
"saveBlobToCal": true
},
{
"message" : "Both Position 3 - press Enter",
"num_cameras": 2,
"cameras" : [ 0, 1 ],
"saveBlobData" : true,
"fileMessage" : "both_pos_3",
"saveImage" : true,
"saveBlobToCal": true
},
{
"message" : "Both Position 4 - press Enter",
"num_cameras": 2,
"cameras" : [ 0, 1 ],
"saveBlobData" : true,
"fileMessage" : "both_pos_4",
"saveImage" : true,
"saveBlobToCal": true
},
{
"message" : "Both Position 5 - press Enter",
"num_cameras": 2,
"cameras" : [ 0, 1 ],
"saveBlobData" : true,
"fileMessage" : "both_pos_5",
"saveImage" : true,
"saveBlobToCal": true
}
]
},
"camera": {
"type": "CUDA",
"cuda": {
"devices": [
{
"enabled": true,
"name": "Camera-0",
"path": "/dev/video1",
"bufferPoolSize": 4,
"width": 1280,
"height": 720,
"hFlip":true,
"vFlip":true,
"gamma" : {
"R": 1.0,
"G": 1.0,
"B": 1.0
},
"ae" : {
"exposureP":0.05,
"gainP":0.02,
"targetY":0.35,
"errorY":0.0001
},
"awb" : {
"grayThreshold":0.3,
"numSamples":1000,
"P":0.15,
"targetU":0.5,
"targetV":0.53,
"seed":0
}
},
{
"enabled": true,
"name": "Camera-1",
"path": "/dev/video0",
"bufferPoolSize": 4,
"width": 1280,
"height": 720,
"hFlip":true,
"vFlip":true,
"gamma" : {
"R": 1.0,
"G": 1.0,
"B": 1.0
},
"ae" : {
"exposureP":0.05,
"gainP":0.02,
"targetY":0.35,
"errorY":0.0001
},
"awb" : {
"grayThreshold":0.3,
"numSamples":1000,
"P":0.15,
"targetU":0.5,
"targetV":0.53,
"seed":0
}
}
],
"cuda" : {
}
},
"file": {
"videos": [
"videos/video-000/video.json",
"videos/video-001/video.json"
],
"format": "YUV420p"
},
"v4l2": {
"devices": {
"left": "/dev/video0",
"right": "/dev/video1"
}
}
}
}
}

View File

@@ -0,0 +1,32 @@
{
"WebCore": {
"serverPort": 9292,
"fileRoot": "/usr/local/var/www/certificationservice",
"requestLogging": false
},
"CertificationService": {
"registryPort": 8181,
"serverPort": 9292,
"enableDebugSocket": true
},
"ErrorTracker": {
"views": [
{
"name": "CertificationService",
"errors": []
}
]
},
"logging": {
"channels": {
"splitter": {
"channels": "syslog"
}
},
"loggers": {
"root": {
"level": "notice"
}
}
}
}

View File

@@ -0,0 +1,87 @@
{
"WebCore": {
"serverPort": 8489,
"fileRoot": "/usr/local/var/www/identity"
},
"IdentityService":{
"registryPort":8181,
"serverPort":8489,
"global" : {
"face_landmark_68" : {
"file" :
"/usr/local/share/lps/shape_predictor_68_face_landmarks.dat"
}
},
"engine" : {
"processor":{
"max_requests":10,
"interval":1000
},
"manager" : {
"criteria" : { },
"kind" : "face",
"max_subjects" : 16,
"max_examples" : 5,
"max_attempts" : 3,
"directory" : "/var/jibo/identity/faces",
"detector": {
"criteria": {},
"min_hint_width" : 40,
"min_hint_height" : 40
}
},
"identifier" : {
"identifier_type": "deepid",
"eigenfaces" : {
"type" : "eigenfaces_identifier",
"name" : "eigenfaces",
"kind" : "face",
"size" : 128,
"radius" : 5,
"attenuation" : 100.0,
"filename" : "/var/jibo/identity/eigenfaces.data"
},
"deepid" : {
"type" : "deepid_identifier",
"name" : "deepid",
"kind" : "face",
"solver" : "/usr/local/share/lps/deepid/CASIA_solver.prototxt",
"model" : "/usr/local/share/lps/deepid/CASIA_train_test.prototxt",
"snapshot" : "/usr/local/share/lps/deepid",
"weights" : "/usr/local/share/lps/deepid/CASIA_iter_666000.caffemodel",
"iterations" : 50000,
"size" : 128,
"sigint_effect" : "stop",
"sighup_effect" : "snapshot",
"jlf" : "/var/jibo/identity/deepid",
"filename" : "/var/jibo/identity/deepid.data",
"gpu_id":0
},
"resnetfaceid" : {
"type" : "resnetfaceid_identifier",
"name" : "resnetfaceid",
"kind" : "face",
"model" : "/usr/local/share/identity/resnet/dlib_face_recognition_resnet_model_v1.dat",
"size" : 150,
"jlf" : "/var/jibo/identity/resnet",
"filename" : "/var/jibo/identity/resnetfaceid.data"
}
}
}
},
"logging" : {
"loggers" : {
"root": {
"level": "warning"
},
"l8" : {
"name" : "IdentificationManager",
"level" : "information"
},
"l11" : {
"name" : "ImageIdentifier",
"level" : "information"
}
}
}
}

View File

@@ -0,0 +1,158 @@
{
"webCore": {
"serverPort": 8090,
"fileRoot": "/usr/local/var/www/jetstream",
"requestLogging": false
},
"JetstreamService": {
"stacktracing": false,
"registryPort": 8181,
"serverPort": 8090
},
"JetService": {
"log_directory": "/var/log/jetstream"
},
"HubClient": {
"proactive_url": "/v1/proactive",
"listen_url": "/v1/listen",
"listen_language": "en-US",
"xxx_override": {
"hub_port": 9000,
"hub_hostname": "172.24.84.137",
"entrypoint_hostname": "dev-entrypoint.jibo.com"
},
"region-settings": {
"comment": "This is a switch, selected by the 'region' field setting in the robot's /var/jibo/credentials.json file",
"dev-entrypoint": {
"hub_port": 443,
"hub_hostname": "dev-hub.jibo.com",
"entrypoint_hostname": "dev-entrypoint.jibo.com"
},
"alpha-entrypoint": {
"hub_port": 443,
"hub_hostname": "alpha-hub.jibo.com",
"entrypoint_hostname": "alpha-entrypoint.jibo.com"
},
"stg-entrypoint": {
"hub_port": 443,
"hub_hostname": "stg-hub.jibo.com",
"entrypoint_hostname": "stg-entrypoint.jibo.com"
},
"preprod-entrypoint": {
"hub_port": 443,
"hub_hostname": "preprod-hub.jibo.com",
"entrypoint_hostname": "preprod-entrypoint.jibo.com"
},
"api": {
"hub_port": 443,
"hub_hostname": "neo-hub.jibo.com",
"entrypoint_hostname": "api.jibo.com"
}
},
"encoding_type_comment": "This can be either LINEAR16, FLAC, or OGG_OPUS",
"encoding_type": "OGG_OPUS",
"encoding-settings": {
"OGG_OPUS": {
"streaming_rate": 1.2,
"channels": 1,
"sample_rate": 16000,
"bitrate": 64000,
"vbr": true
},
"FLAC": {
"streaming_rate": 3.0,
"channels": 1,
"sample_rate": 16000,
"bps": 16
}
}
},
"AudioChannel": {
"block_duration_ms": 50,
"period_size": 85,
"buffer_size": 2048
},
"HJLogger": {
"speech_analytics_log_path": "/var/log/jetstream/hj_logs",
"comment-logging-fraction": "The probability that an HJ utterance will be logged -- range 0-1",
"logging_probability": 0.05,
"start_margin_ms": 500,
"end_margin_ms": 500
},
"RecogHJ": {
"config_path": "/usr/local/share/asr/hey_jibo",
"comment": "Positive margin values widen the HJ Phrase spotter's standard endpoints. The end_margin_ms also compensates for the Phrase Spotter's premature endpoint, which is around the beginning O in jibO",
"hj_start_margin_ms": 0,
"hj_end_margin_ms": 100
},
"HubAsr": {
"global_sosTimeout_sec": 3,
"global_maxSpeechTimeout_sec": 20,
"local_sosTimeout_sec": 2,
"local_maxSpeechTimeout_sec": 20
},
"RecogSpeakerID": {
"ubm_path": "/usr/local/share/asr/sensory_data_td/",
"client_path": "/var/jibo/asr/sensory_data_td/",
"comment": "change next property to 'sensory_log_path' to enable Sensory authenticator logging, 'xxxsensory_log_path' to disable",
"xxxsensory_log_path": "/var/jibo/asr/sensory_auth_logs",
"threshold": -1.2,
"confidence_margin": 2,
"margin-comment": "positive values for start and end margins widen the space around the speaker-id HJ",
"id_start_margin_ms": 250,
"comment2":"id_end_margin is used when retrying to ID with an audio segment, it also controls the end margin of the logged utts",
"id_end_margin_ms": 300,
"PHRASEver": "OFF"
},
"RecogSpeakerEnroll": {
"ubm_path": "/usr/local/share/asr/sensory_data_td/",
"client_path": "/var/jibo/asr/sensory_data_td/",
"comment": "change next property to 'sensory_log_path' to enable Sensory enroller logging, 'xxxsensory_log_path' to disable",
"xxxsensory_log_path": "/var/jibo/asr/sensory_enroller_logs",
"speech_analytics_log_path": "/var/log/jetstream/enroller_logs",
"minEnrollUtts": 6,
"checkQuality": "LOW",
"margin-comment": "positive values for the start margin increase the amount of silence fed to the enroller before the HJ occurs",
"enroll_start_margin_ms": 250
},
"RecogEOS": {
"resource_path": "/usr/local/share/asr/jibo_energy_eos"
},
"RecogNameLearning": {
"resource_path": "/usr/local/share/asr/namelearning",
"temp_path": "/var/jibo/asr/namelearning_temp/",
"speech_analytics_log_path": "/var/log/jetstream/namelearning_logs",
"g2p_service": "http://localhost:8089/tts_nbest_prons"
},
"logging": {
"jibo_message_prefix": "C",
"channels": {
"console": {
"class": "ConsoleChannel",
"pattern": "%Y-%m-%d %H:%M:%S %s: [%p] %t"
},
"syslog": {
"class": "RFC_5424_Channel",
"name": "jibo-jetstream-service",
"facility": "SYSLOG_DAEMON"
},
"splitter": {
"class": "SplitterChannel",
"channels": "syslog"
}
},
"loggers": {
"root": {
"level": "debug"
},
"l1": {
"name": "JetService",
"level": "debug"
},
"l2": {
"name": "Application",
"level": "debug"
}
}
}
}

View File

@@ -0,0 +1,220 @@
{
"transforms": [
{
"name": "root",
"frame_type": "STATIC",
"transform_type": "DH",
"parent": "",
"parameters": {
"d": 0,
"r": 0,
"a": 0,
"initial": 0,
"offset": 0
}
},
{
"name": "base",
"frame_type": "STATIC",
"transform_type": "DH",
"parent": "root",
"parameters": {
"d": 0,
"r": 0,
"a": 0,
"initial": 0,
"offset": 0,
"multiplier": 1
},
"mass": 1.541647,
"center_of_mass": {
"x": 0.004438,
"y": 0.000080,
"z": 0.021875
},
"inertia_tensor": {
"xx": 2.336131,
"yy": 1.869121,
"zz": 3.886624,
"xy": -0.006218,
"xz": 0.030549,
"yz": 0.003324
}
},
{
"name": "pelvis",
"frame_type": "DYNAMIC",
"transform_type": "DH",
"parent": "base",
"parameters": {
"d": 0.043125,
"r": 0.0,
"a": 0.2269,
"initial": 0,
"offset": 0
},
"mass": 0.486722,
"center_of_mass": {
"x": -0.005595,
"y": 0.001393,
"z": 0.020862
},
"inertia_tensor": {
"xx": 0.934733,
"yy": 1.049176,
"zz": 1.600895,
"xy": 0.005263,
"xz": 0.014859,
"yz": 0.006845
}
},
{
"name": "torso",
"frame_type": "DYNAMIC",
"transform_type": "DH",
"parent": "pelvis",
"parameters": {
"d": 0.056129,
"r": 0.0,
"a": -0.37874,
"initial": 0,
"offset": 0
},
"mass": 0.405103,
"center_of_mass": {
"x": 0.001299,
"y": 0.001032,
"z": 0.020476
},
"inertia_tensor": {
"xx": 0.765517,
"yy": 0.847899,
"zz": 1.027389,
"xy": -0.021990,
"xz": 0.005756,
"yz": -0.013292
}
},
{
"name": "head",
"frame_type": "DYNAMIC",
"transform_type": "DH",
"parent": "torso",
"parameters": {
"d": 0.073181,
"r": 0,
"a": 0,
"initial": 0,
"offset": 0
},
"mass": 1.105841,
"center_of_mass": {
"x": -0.006929,
"y": -0.000665,
"z": 0.047582
},
"inertia_tensor": {
"xx": 4.256305,
"yy": 3.001682,
"zz": 3.980863,
"xy": 0.028528,
"xz": -0.070913,
"yz": 0.025871
}
},
{
"name": "upper_head",
"frame_type": "STATIC",
"transform_type": "DH",
"parent": "head",
"parameters": {
"d": 0.108090,
"r": -0.005976,
"a": -0.32882,
"initial": 0,
"offset": 0
}
},
{
"name": "center_face",
"frame_type": "STATIC",
"transform_type": "DH",
"parent": "head",
"parameters": {
"d": 0.060362,
"r": 0.035301,
"a": -0.32882,
"initial": 0,
"offset": 0
}
},
{
"name": "imu_dh",
"frame_type": "STATIC",
"transform_type": "DH",
"parent": "center_face",
"parameters": {
"d": 0.0,
"r": 0.0,
"a": -1.5708,
"initial": 0,
"offset": 0
}
},
{
"name": "imu",
"frame_type": "STATIC",
"transform_type": "DOF6",
"parent": "imu_dh",
"parameters": {
"dx": -0.0410,
"dy": -0.0315,
"dz": 0.0150,
"rx": 0,
"ry": 0,
"rz": 0
}
},
{
"name": "top_head",
"frame_type": "STATIC",
"transform_type": "DH",
"parent": "head",
"parameters": {
"d": 0.142443,
"r": 0.007506,
"a": 0,
"initial": 0,
"offset": 0
}
},
{
"name": "left_eye",
"frame_type": "STATIC",
"transform_type": "DOF6",
"parent": "upper_head",
"parameters": {
"dx": 0,
"dy": 0.041,
"dz": 0,
"rx": 0,
"ry": 0,
"rz": 0
}
},
{
"name": "right_eye",
"frame_type": "STATIC",
"transform_type": "DOF6",
"parent": "upper_head",
"parameters": {
"dx": 0,
"dy": -0.041,
"dz": 0,
"rx": 0,
"ry": 0,
"rz": 0
}
}
]
}

View File

@@ -0,0 +1,235 @@
{
"WebCoreLPS" : {
"serverPort" : 8484,
"fileRoot" : "/usr/local/var/www/lps"
},
"LPSService" : {
"registryPort" : 8181,
"serverPort" : 8484,
"channels": [
"PFSearchRegion",
"CapDevCUDAExpMeta",
"CapDevCUDAExp_0",
"CapDevCUDAExp_1",
"CapDevCUDAExpStat"
]
},
"WebCoreMedia" : {
"serverPort" : 8486,
"fileRoot" : "/usr/local/var/www/media"
},
"MediaService" : {
"registryPort" : 8181,
"serverPort" : 8486,
"photographer" : {
"compressor" : {
"quality" : 92,
"interval" : 1000
},
"oneMP" : { "width" : 1280, "height" : 720 },
"fourMP" : { "width" : 2688, "height" : 1520 },
"request_queue_max_size" : 5
},
"photo_path" : "/opt/jibo/Photos/",
"recording_path" : "/opt/jibo/Recordings/",
"audio_source" : "MediaIn.monitor",
"future_wait_ms" : 8000
},
"AudioSubsystem" : {
"registryPort" : 8181,
"player" : false
},
"BodySubsystem" : {
"registryPort" : 8181,
"player" : false
},
"CaptureSubsystem" : {
"player" : false,
"watchdog" : {
"enabled": false,
"timeout": 5000,
"period" : 3000,
"start" : 10000
},
"camera_config_file" : "/usr/local/etc/lps/cameras.json"
},
"EngineSubsystem" : {
"global" : {
"face_landmark_68" : {
"file" :
"/usr/local/share/lps/shape_predictor_68_face_landmarks.dat"
}
},
"schemas" : {
"normal" : "/usr/local/etc/lps/schemas/normal.json",
"focused" : "/usr/local/etc/lps/schemas/focused.json",
"minimal" : "/usr/local/etc/lps/schemas/minimal.json"
},
"engine" : {
"update_period" : 60,
"log" : {
"schema" : {
"time" : {
"stats" : false,
"skip" : 600
},
"audio" : {
"stats" : false,
"skip" : 600
},
"axis" : {
"stats" : false,
"skip" : 900
},
"image" : {
"stats" : false,
"skip" : 600
}
}
},
"state" : {
"entity_config_file" : "/usr/local/etc/lps/entityConfig.json",
"awareness" : {
"num_sectors" : 8,
"lighting" : {
"criteria" : {
"cameraIds" :[0],
"dimensions" : [
{ "width" : 1280, "height" : 720 }
],
"outputTypes" :[0],
"outputLevels" :[0]
},
"max_luminance" : 1.0,
"max_gain" : 16.0,
"max_exposure" : 0.066667,
"sensor" : [
{ "exposure" : 0.01067, "quality" : 0 },
{ "exposure" : 0.05333, "quality" : 1 },
{ "exposure" : 0.90667, "quality" : 1 },
{ "exposure" : 1.01333, "quality" : 0 }
],
"quality" : [
{ "lighting" : 0.1, "quality" : 0 },
{ "lighting" : 0.2, "quality" : 1 },
{ "lighting" : 1.0, "quality" : 1 },
{ "lighting" : 1.5, "quality" : 0 }
]
}
},
"identification" : {
"face" : {
"type" : "network_face_identification",
"kind": "face",
"registry_host": "127.0.0.1",
"registry_port": 8181,
"connection_timeout":60000,
"criteria" : {
"cameraIds" : [0],
"dimensions" : [{ "width" : 1280, "height" : 720 }],
"outputTypes" : [0]
}
}
},
"geometry" : {
"kinematic_model" :
"/usr/local/etc/jibo-kinematic-model.json",
"left_camera_file" : "/var/jibo/lps/CameraModelParamsL.json",
"right_camera_file" :
"/var/jibo/lps/CameraModelParamsR.json",
"inter_cam_transform_file" :
"/var/jibo/lps/InterCameraTransform.json"
}
}
}
},
"RecorderSubsystem" : {
"root" : "/opt/jibo/data/recorder",
"audio" : {
"detections" : {
"directory" : "/opt/jibo/data/recorder/audio/detections",
"padding" : 7
}
},
"body" : {
"axis" : {
"directory" : "/opt/jibo/data/recorder/body/axis",
"padding" : 7
}
},
"capture" : {
"frames" : {
"directory" : "/opt/jibo/data/recorder/capture/frames",
"padding" : 7,
"criteria" : {
"cameraIds" :[],
"dimensions" :[
{"width" : 640,"height" : 360}
],
"outputTypes" :[0]
}
}
},
"lps" : {
"visual-awareness" : {
"directory" : "/opt/jibo/data/recorder/lps/visual-awareness/",
"padding" : 7
},
"audio-awareness" : {
"directory" : "/opt/jibo/data/recorder/lps/audio-awareness/",
"padding" : 7
}
}
},
"PlayerSubsystem" : {
"root" : "/opt/jibo/data/player",
"audio" : {
"detections" : {
"directory" : "/opt/jibo/data/player/audio/detections"
}
},
"body" : {
"axis" : {
"directory" : "/opt/jibo/data/player/body/axis"
}
},
"capture" : {
"frames" : {
"directory" : "/opt/jibo/data/player/capture/frames"
}
}
},
"ErrorTracker":{
"views": [
{
"name": "LPSService",
"errors": [
"CAMERA_FAILURE"
]
},
{
"name": "MediaService",
"errors": [ ]
}
]
},
"logging" : {
"loggers" : {
"root": {
"level": "warning"
},
"l1" : {
"name" : "ImageIdentifier",
"level" : "information"
},
"l2" : {
"name" : "IdentityFusion",
"level" : "information"
},
"l3" : {
"name" : "Util.Channel",
"level" : "warning"
}
}
}
}

View File

@@ -0,0 +1,88 @@
{
"WebCore": {
"serverPort": 7979,
"fileRoot": "/usr/local/var/www/media"
},
"logging" : {
"channels" : {
"console" : {
"class" : "ConsoleChannel",
"pattern" : "%Y-%m-%d %H:%M:%S %s: [%p] %t"
},
"syslog" : {
"class" : "SyslogChannel",
"name" : "jibo-media-service",
"facility" : "SYSLOG_DAEMON",
"pattern" : "%s: [%p] %t"
},
"splitter" : {
"class" : "SplitterChannel",
"channels" : "syslog"
}
},
"loggers" : {
"l1" : {
"name" : "Application",
"level" : "debug",
"channel" : "splitter"
}
}
},
"MediaService": {
"registryPort":8181,
"serverPort":7979,
"camera": {
"type": "CUDA",
"cuda": {
"devices": [
{
"enabled": true,
"name": "Camera-0",
"path": "/dev/video0",
"bufferPoolSize": 4,
"width": 1280,
"height": 720,
"format": 3,
"hFlip":true,
"vFlip":true,
"gamma" : {
"Y":0.5,
"U":1.0,
"V":1.0
},
"ae" : {
"exposureP":0.1,
"gainP":0.05,
"targetY":0.35,
"errorY":0.0001
},
"awb" : {
"grayThreshold":0.3,
"numSamples":1000,
"P":0.15,
"targetU":0.5,
"targetV":0.53,
"seed":0
}
}
],
"cuda" : {
}
},
"file": {
"videos": [
"videos/video-000/video.json",
"videos/video-001/video.json"
],
"format": "YUV420p"
},
"v4l2": {
"devices": {
"left": "/dev/video0",
"right": "/dev/video1"
}
}
}
}
}

View File

@@ -0,0 +1,50 @@
{
"webCore" : {
"serverPort": 8787,
"requestLogging": false
},
"Service": {
"version":"v2.7.6",
"name":"nlu",
"host":"localhost",
"port":8787,
"path":"/",
"ttl":30,
"reg_timer":10000,
"tls":"",
"handler":"nlu_interface",
"log_ws":"nlu_logs",
"reset_memory_ws":"reset_memory",
"nlu_data_dir":"/usr/local/share/nlu-data",
"default_locale":"en-us",
"post_to_perf_monitor_service":true
},
"parsing": {
"cmp_params": {
"log_weights": false,
"minimize_fst": true,
"union_minimize_fst": false
},
"parsing_params": {
"max_num_states": 50,
"use_v8_interpreter": true
}
},
"logging" : {
"jibo_message_prefix": "C",
"loggers" : {
"root": {
"level": "information"
},
"l1" : {
"name" : "NluService",
"level" : "information"
},
"l2" : {
"name" : "Application",
"level" : "information"
}
}
}
}

View File

@@ -0,0 +1,37 @@
{
"WebCore": {
"serverPort": 8888,
"fileRoot": "/usr/local/var/www/server"
},
"ServerService": {
"registryPort":8181,
"serverPort":8888
},
"NotificationSubsystem":{
"registryPort":8181,
"refreshInterval": 15000,
"serverURLSuffix": "-socket.jibo.com"
},
"ErrorTracker":{
"views": [
{
"name": "ServerService",
"errors": [
"CANNOT_CONNECT_TO_SERVER"
]
}
]
},
"logging" : {
"loggers" : {
"root": {
"level": "warning"
},
"l2": {
"name": "NotificationSubsystem",
"level": "information",
"channel": "splitter"
}
}
}
}

View File

@@ -0,0 +1,35 @@
{
"WebCore": {
"serverPort": 9797,
"fileRoot": "/usr/local/var/www/servicecenterservice",
"requestLogging": false
},
"ServiceCenterService": {
"registryPort": 8181,
"serverPort": 9797
},
"ErrorTracker": {
"views": [
{
"name": "ServiceCenterService",
"errors": []
}
]
},
"logging": {
"channels": {
"splitter": {
"channels": "syslog"
}
},
"loggers": {
"root": {
"level": "notice"
},
"ServiceCenterService": {
"name": "ServiceCenterService",
"level": "notice"
}
}
}
}

View File

@@ -0,0 +1,23 @@
{
"WebCore" : {
"serverPort": 8181,
"fileRoot": "/usr/local/var/www/service-registry",
"requestLogging": false
},
"ManagementCore": {
"authenticate": false,
"validate": false,
"fileRoot": "/usr/local/var/www/service-management"
},
"ServiceRegistry": {
"registryPort": 8181,
"serverPort": 8181
},
"logging": {
"loggers": {
"root": {
"level": "notice"
}
}
}
}

View File

@@ -0,0 +1,69 @@
{
"platformVersion": ">=3.1.0",
"services": {
"KBService": {
"port": 8778
},
"GlobalManagerService": {
"port": 8338
},
"SkillsService": {
"singleSkill": true,
"port": 8779
},
"NotificationsService": {
"port": 8001
},
"PerformanceService": {
"port": 10003
},
"PerformanceServiceSim": {},
"ErrorService": {
"port": 10004
},
"SchedulerService": {
"port": 10005,
"otaFilter": "fcs"
},
"RemoteService": {
"port": 10321
},
"WifiService": {
"port": 8668,
"region": "api"
},
"DevShell": {
"port": 8686,
"syncPort": 8989,
"debugPort": 9191,
"skillDest": "/opt/jibo/Skills",
"skillUser": "jibo-skill",
"sdkDest": "bin/on-robot/"
}
},
"RegistryClient": {
"port": 8181,
"host": "127.0.0.1"
},
"logging": {
"logUncaughtExceptions": true,
"logUnhandledRejections": true,
"stackTraceLimit": 30,
"outputs": {
"console": {
"outputFileAndLine": false
},
"syslog": {
"port": 514,
"target": "127.0.0.1",
"outputFileAndLine": false
}
},
"namespaces": {
"": {
"console": "info",
"syslog": "info"
}
}
}
}

View File

@@ -0,0 +1,71 @@
{
"platformVersion": ">=3.1.0",
"services": {
"KBService": {
"port": 8778
},
"GlobalManagerService": {
"port": 8338
},
"SkillsService": {
"singleSkill": true,
"port": 8779
},
"NotificationsService": {
"port": 8001
},
"PerformanceService": {
"port": 10003
},
"PerformanceServiceSim": {},
"ErrorService": {
"port": 10004
},
"SchedulerService": {
"port": 10005,
"otaFilter": "fcs"
},
"RemoteService": {
"port": 10321
},
"WifiService": {
"port": 8668,
"region": "api"
},
"DevShell": {
"port": 8686,
"syncPort": 8989,
"debugPort": 9191,
"skillDest": "/opt/jibo/Jibo/Skills",
"skillUser": "jibo-skill",
"sdkDest": "bin/on-robot/"
}
},
"RegistryClient": {
"port": 8181,
"host": "127.0.0.1"
},
"logging": {
"logUncaughtExceptions": true,
"logUnhandledRejections": true,
"stackTraceLimit": 30,
"outputs": {
"console": {
"outputFileAndLine": false
},
"syslog": {
"port": 514,
"target": "127.0.0.1",
"outputFileAndLine": false
}
},
"namespaces": {
"SSM.Client.ASR": {"console": "info", "syslog": "debug" },
"C.AsrService": {"console": "info", "syslog": "debug" },
"": {
"console": "info",
"syslog": "info"
}
}
}
}

View File

@@ -0,0 +1,60 @@
{
"platformVersion": ">=3.1.0",
"services": {
"KBService": {
"port": 8778
},
"GlobalManagerService": {
"port": 8338
},
"SkillsService": {
"startSkill": "@be/be",
"singleSkill": true,
"port": 8779
},
"NotificationsService": {
"port": 8001
},
"ErrorService": {
"port": 10004
},
"SchedulerService": {
"port": 10005,
"otaFilter": "fcs"
},
"PerformanceServiceSim": {},
"RemoteService": {
"port": 10321
},
"WifiService": {
"port": 8668,
"region": "api"
}
},
"RegistryClient": {
"port": 8181,
"host": "127.0.0.1"
},
"logging": {
"logUncaughtExceptions": true,
"logUnhandledRejections": true,
"stackTraceLimit": 30,
"outputs": {
"console": {
"outputFileAndLine": false
},
"syslog": {
"port": 514,
"target": "127.0.0.1",
"outputFileAndLine": false
}
},
"namespaces": {
"": {
"console": "none",
"syslog": "info"
}
}
}
}

View File

@@ -0,0 +1,57 @@
{
"platformVersion": ">=3.1.0",
"services": {
"KBService": {
"port": 8778
},
"GlobalManagerService": {
"port": 8338
},
"SkillsService": {
"singleSkill": true,
"startSkill": "oobe-config",
"port": 8779
},
"NotificationsService": {
"port": 8001
},
"ErrorService": {
"port": 10004
},
"SchedulerService": {
"port": 10005,
"otaFilter": "fcs"
},
"PerformanceServiceSim": {},
"WifiService": {
"port": 8668,
"region": "api"
}
},
"RegistryClient": {
"port": 8181,
"host": "127.0.0.1"
},
"logging": {
"logUncaughtExceptions": true,
"logUnhandledRejections": true,
"stackTraceLimit": 30,
"outputs": {
"console": {
"outputFileAndLine": false
},
"syslog": {
"port": 514,
"target": "127.0.0.1",
"outputFileAndLine": false
}
},
"namespaces": {
"": {
"console": "none",
"syslog": "info"
}
}
}
}

View File

View File

@@ -0,0 +1,676 @@
{
"WebCore": {
"serverPort": 8585,
"fileRoot": "/usr/local/var/www/system"
},
"ManagementCore": {
"authenticate": false,
"validate": false
},
"SystemManager": {
"registryPort": 8181,
"serverPort": 8585,
"service": {
"connection_timeout": 210000,
"backup":{
"file": "/opt/tmp/backup.tar.bz2",
"directory" : "/opt/tmp/backup",
"executable" : "/usr/local/bin/jibo-system-backup"
},
"restore":{
"file" : "/opt/tmp/restore.tar.bz2",
"directory": "/opt/tmp/restore",
"executable": "/usr/local/bin/jibo-system-restore"
},
"services" : [
{
"name": "body",
"order": 0,
"executable": "/usr/local/bin/jibo-body-service",
"modes": {
"default": {
"arguments": ["-c","/usr/local/etc/jibo-body-service.json"],
"environment": {
"DISPLAY": ":0",
"XAUTHORITY": "/tmp/.Xauthority"
},
"directory": "",
"enabled":true
},
"certification": {
"enabled": false
}
},
"startup_timeout":10000,
"shutdown_timeout":10000,
"crash_code": "SERVICE_CRASH_BODY"
},
{
"name": "audio",
"order": 1,
"executable": "/usr/local/bin/jibo-audio-service",
"modes": {
"default": {
"arguments": ["-c","/usr/local/etc/jibo-audio-service.json"],
"environment": {},
"directory": "",
"enabled":true
},
"certification": {
"enabled": false
}
},
"startup_timeout":10000,
"shutdown_timeout":10000,
"crash_code": "SERVICE_CRASH_AUDIO"
},
{
"name": "tts",
"order": 2,
"executable": "/usr/local/bin/jibo-tts-service",
"modes": {
"default": {
"arguments": ["-c","/usr/local/etc/jibo-tts-service.json"],
"environment": {},
"directory": "",
"enabled":true
},
"certification": {
"enabled": false
},
"service": {
"enabled": false
}
},
"startup_timeout":10000,
"shutdown_timeout":10000,
"crash_code": "SERVICE_CRASH_TTS"
},
{
"name": "asr",
"order": 2,
"executable": "/usr/local/bin/jibo-asr-service",
"modes": {
"default": {
"arguments": ["-c","/usr/local/etc/jibo-asr-service.json"],
"environment": {},
"directory": "",
"enabled":true
},
"certification": {
"enabled": false
},
"service": {
"enabled": false
}
},
"startup_timeout":10000,
"shutdown_timeout":10000,
"crash_code": "SERVICE_CRASH_ASR"
},
{
"name": "jetstream",
"order": 2,
"executable": "/usr/local/bin/jibo-jetstream-service",
"modes": {
"default": {
"arguments": ["-c","/usr/local/etc/jibo-jetstream-service.json"],
"environment": {},
"directory": "",
"enabled": true
},
"certification": {
"enabled": false
},
"service": {
"enabled": true
}
},
"startup_timeout":10000,
"shutdown_timeout":10000,
"crash_code": "SERVICE_CRASH_JETSTREAM"
},
{
"name": "nlu",
"order": 2,
"executable": "/usr/local/bin/jibo-nlu-service",
"modes": {
"default": {
"arguments": ["-c","/usr/local/etc/jibo-nlu-service.json"],
"environment": {},
"directory": "",
"enabled":false
},
"certification": {
"enabled": false
},
"service": {
"enabled": false
}
},
"startup_timeout":10000,
"shutdown_timeout":10000,
"crash_code": "SERVICE_CRASH_NLU"
},
{
"name": "identity",
"order": 2,
"executable": "/usr/local/bin/jibo-identity-service",
"modes": {
"default": {
"arguments": ["-c","/usr/local/etc/jibo-identity-service.json"],
"environment": {
"GLOG_minloglevel": "2"
},
"directory": "",
"enabled":true
},
"certification": {
"enabled": false
},
"service": {
"enabled": false
}
},
"startup_timeout":10000,
"shutdown_timeout":10000,
"crash_code": "SERVICE_CRASH_IDENTITY"
},
{
"name": "lps",
"order": 3,
"executable": "/usr/local/bin/jibo-lps-service",
"modes": {
"default": {
"arguments": ["-c","/usr/local/etc/jibo-lps-service.json"],
"environment": {
"DISPLAY": ":0",
"XAUTHORITY": "/tmp/.Xauthority",
"GST_REGISTRY": "/usr/share/gstreamer-1.0/registry.$(uname -m).bin",
"GST_GL_XINITTHREADS": "1",
"GST_REGISTRY_UPDATE": "no"
},
"directory": "",
"enabled":true
},
"certification": {
"enabled": false
}
},
"startup_timeout":60000,
"shutdown_timeout":10000,
"crash_code": "SERVICE_CRASH_LPS"
},
{
"name": "secure-transfer",
"order": 4,
"executable": "/usr/bin/node",
"modes": {
"default": {
"arguments": ["/usr/local/bin/jibo-sts/index.js"],
"environment": {},
"directory": "",
"enabled":true
},
"int-developer": {
"arguments": [
"--inspect=10775",
"/usr/local/bin/jibo-sts/index.js"
],
"environment": {},
"directory" : "",
"enabled":true
},
"certification": {
"enabled": false
},
"service": {
"enabled": false
}
},
"startup_timeout":10000,
"shutdown_timeout":10000,
"crash_code": "SERVICE_CRASH_SECURE_TRANSFER"
},
{
"name": "security-controller-service",
"order": 4,
"executable": "/usr/bin/node",
"modes": {
"default": {
"arguments": [
"/usr/local/bin/jibo-ssm/jibo-scs.js"
],
"environment": {},
"directory": "",
"enabled":true
},
"int-developer": {
"arguments": [
"--inspect=10226",
"/usr/local/bin/jibo-ssm/jibo-scs.js"
],
"environment": {},
"directory": "",
"enabled":true
},
"certification": {
"enabled": false
},
"service": {
"enabled": false
}
},
"startup_timeout":10000,
"shutdown_timeout":10000,
"crash_code": "SERVICE_CRASH_SECURITY_CONTROLLER_SERVICE"
},
{
"name": "media-manager",
"order": 4,
"executable": "/usr/bin/node",
"modes": {
"default": {
"arguments": [
"/usr/local/bin/jibo-ssm/jibo-mms.js"
],
"environment": {},
"directory": "",
"enabled":true
},
"int-developer": {
"arguments": [
"--inspect=10225",
"/usr/local/bin/jibo-ssm/jibo-mms.js"
],
"environment": {},
"directory": "",
"enabled":true
},
"certification": {
"enabled": false
},
"service": {
"enabled": false
}
},
"startup_timeout":10000,
"shutdown_timeout":10000,
"crash_code": "SERVICE_CRASH_MEDIA_MANAGER"
},
{
"name": "monitor",
"order": 4,
"executable": "/usr/local/bin/jibo-system-monitoring-service",
"modes": {
"default": {
"arguments": ["-c","/usr/local/etc/jibo-system-monitoring-service.json"],
"environment": {},
"directory": "",
"enabled":true
},
"certification": {
"enabled": false
}
},
"startup_timeout":10000,
"shutdown_timeout":10000,
"crash_code": "SERVICE_CRASH_MONITOR"
},
{
"name": "server",
"order": 4,
"executable": "/usr/local/bin/jibo-server-service",
"modes": {
"default": {
"arguments": ["-c","/usr/local/etc/jibo-server-service.json"],
"environment": {},
"directory": "",
"enabled":true
},
"certification": {
"enabled": false
},
"service": {
"enabled": false
}
},
"startup_timeout":10000,
"shutdown_timeout":10000,
"crash_code": "SERVICE_CRASH_SERVER"
},
{
"name": "ssm",
"order": 5,
"executable": "/usr/bin/node",
"modes": {
"default": {
"arguments": [
"/usr/local/bin/jibo-ssm/jibo-ssm.js"
],
"environment": {
"DISPLAY": ":0",
"XAUTHORITY": "/tmp/.Xauthority",
"NODE_PATH": "/usr/lib/node_modules",
"RUNMODE": "ON_ROBOT",
"XDG_CONFIG_HOME": "/tmp/.config"
},
"directory" : "",
"enabled":true
},
"int-developer": {
"arguments": [
"--inspect=10223",
"/usr/local/bin/jibo-ssm/jibo-ssm.js"
],
"environment": {
"DISPLAY": ":0",
"XAUTHORITY": "/tmp/.Xauthority",
"NODE_PATH": "/usr/lib/node_modules",
"RUNMODE": "ON_ROBOT",
"XDG_CONFIG_HOME": "/tmp/.config"
},
"directory" : "",
"enabled":true
},
"certification": {
"enabled": false
},
"service": {
"enabled": false
}
},
"startup_timeout":60000,
"shutdown_timeout":10000,
"crash_code": "SERVICE_CRASH_SSM"
},
{
"name": "expression",
"order": 4,
"executable": "/usr/bin/node",
"modes": {
"default": {
"arguments": [
"/usr/local/bin/jibo-ssm/lib/expression-process.js"
],
"environment": {
"NODE_PATH": "/usr/lib/node_modules",
"RUNMODE": "ON_ROBOT"
},
"directory" : "",
"enabled":true
},
"int-developer": {
"arguments": [
"--inspect=10224",
"/usr/local/bin/jibo-ssm/jibo-expression.js"
],
"environment": {
"NODE_PATH": "/usr/lib/node_modules",
"RUNMODE": "ON_ROBOT"
},
"directory" : "",
"enabled":true
},
"certification": {
"enabled": false
},
"service": {
"enabled": false
}
},
"startup_timeout":60000,
"shutdown_timeout":10000,
"crash_code": "SERVICE_CRASH_EXPRESSION"
},
{
"name": "certification",
"order": 0,
"executable": "/usr/local/bin/jibo-certification-service",
"modes": {
"default": {
"arguments": [
"-c", "/usr/local/etc/jibo-certification-service.json"
],
"environment": {},
"directory": "",
"enabled": false
},
"certification": {
"arguments": [
"-c", "/usr/local/etc/jibo-certification-service.json"
],
"environment": {},
"directory": "",
"enabled": true
},
"service": {
"arguments": [
"-c", "/usr/local/etc/jibo-certification-service.json"
],
"environment": {},
"directory": "",
"enabled": true
}
},
"startup_timeout": 10000,
"shutdown_timeout": 10000,
"crash_code": "SERVICE_CRASH_CERTIFICATION"
},
{
"name": "service-center",
"order": 5,
"executable": "/usr/local/bin/jibo-service-center-service",
"modes": {
"default": {
"arguments": [
"-c", "/usr/local/etc/jibo-service-center-service.json"
],
"environment": {
"DISPLAY": ":0",
"XAUTHORITY": "/tmp/.Xauthority"
},
"environment": {},
"directory": "",
"enabled": false
},
"service": {
"arguments": [
"-c", "/usr/local/etc/jibo-service-center-service.json"
],
"environment": {
"DISPLAY": ":0",
"XAUTHORITY": "/tmp/.Xauthority"
},
"directory": "",
"enabled": true
}
},
"startup_timeout": 10000,
"shutdown_timeout": 10000,
"crash_code": "SERVICE_CRASH_SERVICE_CENTER"
}
]
},
"session": {
},
"skill":{
"executable": "/usr/bin/electron/electron",
"arguments": [
"--remote-debugging-port=9222",
"/usr/local/bin/jibo-ssm/skill-main.js"
],
"environment": {
"DISPLAY": ":0",
"XAUTHORITY": "/tmp/.Xauthority",
"XDG_CONFIG_HOME": "/opt/home/jibo-skill/.config"
},
"path": {
"jibo": [
"/opt/jibo/Jibo/Skills/@be",
"/opt/jibo/Jibo/Skills"
],
"devs": [
"/opt/jibo/Skills"
]
},
"modes":{
"normal" : {
"user" : "jibo-skill"
},
"oobe" : {
"user" : "jibo-skill"
},
"int-developer" : {
"user" : "jibo-skill"
},
"developer" : {
"user" : "jibo-skill"
}
}
},
"storage" : {
"mount_entries_file": "/proc/mounts",
"semantic": {
"jibo": "/opt/jibo/Jibo",
"skills": "/opt/jibo/Skills",
"photos": "/opt/jibo/Photos",
"recordings": "/opt/jibo/Recordings",
"knowledge": "/opt/jibo/Knowledge"
}
},
"credentials" : {
"path" : "/var/jibo/credentials.json"
},
"wifi" : {
"wpa" : {
"interface": "wlan0",
"runtime" : "/var/run/wpa_supplicant",
"reconnect_interval": 15000,
"monitor_interval": 1000
},
"udhcpc" : {
"executable" : "udhcpc",
"options" : "-R -b -t 3 -T 5 -A 5"
}
},
"powerButton" : {
"path" : "/dev/input/event0",
"duration" : 2000,
"warning" : 10000
},
"powerManager" : {
"warning" : 10000
},
"time": {
"timezone_path": "/var/etc/timezone",
"localtime_path": "/var/etc/localtime",
"zoneinfo_path": "/usr/share/zoneinfo",
"ntpd_init": "/etc/init.d/S66ntp",
"ntpdate": {
"command": "/usr/bin/ntpdate",
"arguments": [
"-b",
"-t",
"3",
"0.north-america.pool.ntp.org"
]
},
"hwclock": {
"command": "/sbin/hwclock",
"arguments": [
"--systohc"
]
}
},
"update": {
"subsystems": {
"os": {
"version_check": "os",
"apply_method": "system",
"default_order": 1
},
"services": {
"version_check": "services",
"apply_method": "system",
"default_order": 2
},
"jibo-diagnostics": {
"version_check": "skill",
"apply_method": "skill",
"default_order": 3
},
"fin-goods-test": {
"version_check": "skill",
"apply_method": "skill",
"default_order": 4
},
"oobe-config": {
"version_check": "skill",
"apply_method": "skill",
"default_order": 5
},
"@be/be": {
"version_check": "skill",
"apply_method": "skill",
"default_order": 6
},
"jibo-rhino": {
"version_check": "skill",
"apply_method": "skill",
"default_order": 7
},
"jibo-trivia": {
"version_check": "skill",
"apply_method": "skill",
"default_order": 8
},
"jibo-tbd": {
"version_check": "skill",
"apply_method": "skill",
"default_order": 9
}
}
},
"firewall": {
"mode_commands": {
"remote_operation": ["-p tcp --syn --dport 7160 -j ACCEPT"]
}
}
},
"ErrorTracker":{
"views": [
{
"name": "SystemManager",
"errors": [
"SERVICE_CRASH_BODY",
"SERVICE_CRASH_AUDIO",
"SERVICE_CRASH_TTS",
"SERVICE_CRASH_ASR",
"SERVICE_CRASH_NLU",
"SERVICE_CRASH_IDENTITY",
"SERVICE_CRASH_LPS",
"SERVICE_CRASH_MEDIA_MANAGER",
"SERVICE_CRASH_SECURE_TRANSFER",
"SERVICE_CRASH_MONITOR",
"SERVICE_CRASH_SERVER",
"SERVICE_CRASH_SSM",
"SERVICE_CRASH_EXPRESSION",
"WPA_CONTROL_INTERFACE_DOWN"
]
}
]
},
"logging" : {
"loggers" : {
"root": {
"level": "warning"
},
"l4" : {
"name" : "SystemManager",
"level" : "information"
}
}
}
}

View File

@@ -0,0 +1,57 @@
{
"WebCore": {
"serverPort": 4111,
"fileRoot": "/usr/local/var/www/systemMonitor"
},
"SystemMonitoringService": {
"registryPort": 8181,
"serverPort": 4111,
"storage" : {
"mount_entries_file": "/proc/mounts",
"semantic": {
"jibo": "/opt/jibo/Jibo",
"skills": "/opt/jibo/Skills",
"photos": "/opt/jibo/Photos",
"recordings": "/opt/jibo/Recordings",
"knowledge": "/opt/jibo/Knowledge",
"tmp": "/tmp"
},
"low_storage_byte": 1073741824,
"polling_interval": 60000
},
"error" : {
"connection_timeout":5000,
"polling_interval":10000
},
"health" : {
"connection_timeout":30000,
"polling_interval": 1800000,
"upload" : {
"executable": "/usr/bin/jibo-log-client-async",
"arguments": [
"--credentials","/var/jibo/credentials.json",
"--kind","HEALTH"
],
"environment": {},
"directory": ""
}
}
},
"ErrorTracker": {
"views": [
{
"name": "SystemMonitoringService",
"errors": [
"LOW_ROBOT_STORAGE"
]
}
]
},
"logging" : {
"loggers" : {
"root": {
"level": "warning"
}
}
}
}

View File

@@ -0,0 +1,97 @@
{
"WebCore": {
"serverPort": 7979,
"fileRoot": "/usr/local/var/www/capture-tools"
},
"TestCaptureService": {
"registryPort": 8181,
"serverPort": 7979,
"camera": {
"type": "CUDA",
"cuda": {
"devices": [
{
"enabled": true,
"name": "Right Wide Eye",
"path": "/dev/video1",
"bufferPoolSize": 4,
"width": 672,
"height": 380,
"outputBufferFormats" : 2,
"hFlip":true,
"vFlip":true,
"gamma" : {
"R":0.75,
"G":0.7,
"B":0.7
},
"ae" : {
"exposureP":0.05,
"gainP":0.02,
"targetY":0.6,
"skinSegmentedTargetY" : 0.5,
"skinSegmentedAvgYThreshold" : 0.8,
"skinRatioThreshold" : 0.010,
"errorY":0.0001
},
"awb" : {
"grayThreshold":0.3,
"numSamples":1000,
"P":0.15,
"targetU":0.505,
"targetV":0.50
}
},
{
"enabled": true,
"name": "Left Narrow Eye",
"path": "/dev/video0",
"bufferPoolSize": 4,
"width": 672,
"height": 380,
"outputBufferFormats" : 2,
"hFlip":true,
"vFlip":true,
"gamma" : {
"R":0.75,
"G":0.7,
"B":0.7
},
"ae" : {
"exposureP":0.05,
"gainP":0.02,
"targetY":0.6,
"skinSegmentedTargetY" : 0.5,
"skinSegmentedAvgYThreshold" : 0.8,
"skinRatioThreshold" : 0.010,
"errorY":0.0001
},
"awb" : {
"grayThreshold":0.3,
"numSamples":1000,
"P":0.15,
"targetU":0.505,
"targetV":0.50
}
}
],
"cuda" : {
}
},
"file": {
"videos": [
"videos/video-000/video.json",
"videos/video-001/video.json"
],
"format": "YUV420p"
},
"v4l2": {
"devices": {
"left": "/dev/video0",
"right": "/dev/video1"
}
}
}
}
}

View File

@@ -0,0 +1,117 @@
{
"test" : {
"handler" : {
"num_frames" : 0,
"awb_lock_count" : 190,
"ae_lock_count" : 190,
"min_exposure" : 0.012,
"max_exposure" : 0.033,
"record" : {
"enabled" : false,
"directory" : "/tmp/jibo-cap/",
"padding" : 5,
"skip_count" : 180
},
"recordAxes" : {
"enabled" : false,
"uri" : "http://localhost:8282/axis_state",
"padding" : 5
},
"display" : {
"enabled" : true
},
"displayCycle" : {
"enabled" : false
},
"profiler" : {
"enabled" : true
},
"fps" : {
"enabled" : false
}
},
"camera" : {
"type" : "CUDA",
"cuda" : {
"devices" : [
{
"enabled":true,
"name" : "Right Wide Eye",
"path" : "/dev/video1",
"bufferPoolSize" : 4,
"width" : 1280,
"height" : 720,
"outputBufferFormats" : 0,
"hFlip" : true,
"vFlip" : true,
"gamma" : {
"R" : 0.6,
"G" : 0.6,
"B" : 0.6
},
"ae" : {
"exposureP" : 0.05,
"gainP" : 0.02,
"targetY" : 0.25,
"errorY" : 0.0001
},
"awb" : {
"grayThreshold" : 0.3,
"numSamples" : 1000,
"P" : 0.15,
"targetU" : 0.505,
"targetV" : 0.50,
"seed" : 0
}
},
{
"enabled":true,
"name" : "Left Narrow Eye",
"path" : "/dev/video0",
"bufferPoolSize" : 4,
"width" : 672,
"height" : 380,
"outputBufferFormats" : 0,
"hFlip" : true,
"vFlip" : true,
"gamma" : {
"R" : 0.6,
"G" : 0.6,
"B" : 0.6
},
"ae" : {
"exposureP" : 0.05,
"gainP" : 0.02,
"targetY" : 0.25,
"errorY" : 0.0001
},
"awb" : {
"grayThreshold" : 0.3,
"numSamples" : 1000,
"P" : 0.15,
"targetU" : 0.505,
"targetV" : 0.50,
"seed" : 0
}
}
],
"cuda" : {
}
},
"file" : {
"videos" : [
"videos/video-000/video.json",
"videos/video-001/video.json"
],
"format" : "YUV420p"
},
"v4l2" : {
"devices" : {
"left" : "/dev/video0",
"right" : "/dev/video1"
}
}
}
}
}

View File

@@ -0,0 +1,110 @@
{
"webCore" : {
"serverPort": 8089,
"fileRoot": "/usr/local/var/www/ttsservice",
"requestLogging": false
},
"TTSService" : {
"alsaPlaybackDevice" : "TTSOut",
"audioDriver" : "alsa",
"effectsDir" : "/usr/local/share/ttsservice/effects",
"enableFadeOut" : "FALSE",
"enableJiboDefaultSwitch" : "FALSE",
"enablePD" : "FALSE",
"postToPerformanceService" : "TRUE",
"enableTextNorm" : "TRUE",
"maxRSSMemory" : 250000,
"frontEnd" : "JIBO",
"resourcePath" : "/usr/local/share/ttsservice/voices/en_us_world/"
},
"voiceParams" : {
"postFilter_b" : "0.40",
"samplerate_s" : "48000",
"framerate_p" : "240",
"pitchbw_jf" : "0.40",
"halftone_fm" : "3",
"unvoicedvoice_u" : "0.15",
"allPass_a" : "0.76",
"gvMCEP_jm" : "0.9",
"speed_r" : "1",
"mode" : "text",
"outmode" : "stream",
"mgc_order" : "60",
"frontendResource" : "/usr/local/share/ttsservice/voices/en_us/griffin/fsts/",
"buffer_size" : "1024",
"fft_size" : "1024",
"volume_linear" : "0.65",
"maxChars" : "1000"
},
"PostFilterMap" : {
"pitchshiftSwitch" : "pitchStrength",
"freqshiftSwitch" : "freqshiftAmount",
"autotuneSwitch" : "autotunePitch",
"vocoderSwitch" : "vocoderChord",
"phaserSwitch" : "phaserAmount",
"resonatorSwitch" : "resonatorPitch",
"ringmodSwitch" : "ringmodFreq",
"aliasSwitch" : "aliasAmount",
"flangerSwitch" : "flangerAmount",
"chorusSwitch" : "chorusAmount",
"masteringSwitch" : "masteringAmount",
"excitedSwitch" : "excitedAmount",
"worriedSwitch" : "worriedAmount",
"disapproveSwitch" : "disapproveAmount",
"neutralSwitch" : "neutralAmount",
"affectionateSwitch" : "affectionateAmount",
"sorrowSwitch" : "sorrowAmount",
"laughterSwitch" : "laughterAmount",
"listSwitch" : "listAmount",
"emphasisSwitch" : "emphasisAmount",
"fadeSwitch" : "fadeAmount",
"makeSimilar" : "makeSimilar",
"analysisSwitch" : "analysisSwitch",
"oo" : "1",
"wow" : "2",
"perfect" : "3",
"ok" : "4",
"ooo" : "5",
"ah" : "6",
"oh" : "7",
"your_welcome" : "8",
"cool" : "9",
"woo_hoo_hoo" : "10",
"laugh" : "11",
"laugh2" : "12",
"sweet" : "13",
"done" : "14",
"what" : "15",
"aw" : "16",
"my_bad" : "17",
"oops" : "18",
"um" : "19",
"huh" : "20",
"whoa" : "21",
"argh" : "22",
"nm_um" : "23",
"i_love_to_1" : "24",
"i_love_to_2" : "25",
"i_love_to_3" : "26",
"i_love_to_4" : "27",
"i_love_to_5" : "28",
"i_love_to_6" : "29",
"triggerJibonics" : "bang"
},
"logging" : {
"jibo_message_prefix": "C",
"loggers" : {
"root": {
"level": "warning"
},
"l1" : {
"name" : "TTSService",
"level" : "information"
},
"l2" : {
"name" : "Application",
"level" : "information"
}
}
}
}

View File

@@ -0,0 +1,168 @@
{
"type" : "CUDA",
"cuda" : {
"devices" : [
{
"enabled" : true,
"name" : "Camera-0",
"path" : "/dev/video1",
"bufferPoolSize" : 10,
"width" : 1280,
"height" : 720,
"outputBufferFormats" : 2,
"hFlip" : true,
"vFlip" : true,
"gamma" : {
"R" : 0.7,
"G" : 0.7,
"B" : 0.7
},
"numSamples" : 10000,
"ae" : {
"exposureP" : 0.02,
"gainP" : 0.02,
"targetY" : 0.6,
"avgYThreshold" : 0.8,
"skinSegmentedTargetY" : 0.43,
"skinSegmentedAvgYThreshold" : 0.8,
"skinRatioThreshold" : 0.010,
"numSamples" : 1000,
"numRegions" : 64,
"errorY" : 0.0001
},
"awb" : {
"grayThreshold" : 0.3,
"numSamples" : 1000,
"P" : 0.15,
"targetU" : 0.505,
"targetV" : 0.50,
"seed" : 0
}
},
{
"enabled" : true,
"name" : "Camera-1",
"path" : "/dev/video0",
"bufferPoolSize" : 4,
"width" : 1280,
"height" : 720,
"outputBufferFormats" : 2,
"hFlip" : true,
"vFlip" : true,
"gamma" : {
"R" : 0.7,
"G" : 0.7,
"B" : 0.7
},
"numSamples" : 10000,
"ae" : {
"exposureP" : 0.02,
"gainP" : 0.02,
"targetY" : 0.6,
"avgYThreshold" : 0.8,
"skinSegmentedTargetY" : 0.46,
"skinSegmentedAvgYThreshold" : 0.8,
"skinRatioThreshold" : 0.010,
"numSamples" : 1000,
"errorY" : 0.0001
},
"awb" : {
"grayThreshold" : 0.3,
"numSamples" : 1000,
"P" : 0.15,
"targetU" : 0.505,
"targetV" : 0.50,
"seed" : 0
}
}
],
"cuda" : {
}
},
"file" : {
"videos" : [
"videos/video-000/video.json",
"videos/video-001/video.json"
],
"format" : "YUV420p"
},
"v4l2" : {
"devices" : {
"left" : "/dev/video0",
"right" : "/dev/video1"
}
},
"controls" : [
{
"width" : 1280,
"height" : 720,
"hFlip" : true,
"vFlip" : true,
"ae" : {
"lock" : false,
"manual" : false,
"time" : {
"low" : 0.0016667,
"high" : 0.033
},
"regions" : [],
"targetY" : 0.4,
"manualMode" : "default",
"manualExposure" : 0.03333,
"manualGain" : 1,
"ev" : 0
},
"outputBuffers" : [],
"outputBuffersConfIndex" : 2,
"awb" : {
"lock" : false,
"manual" : false,
"gammaRed" : 0.7,
"gammaGreen" : 0.7,
"gammaBlue" : 0.7,
"regions" : [],
"manualRedGain" : 1024,
"manualGreenGain" : 1024,
"manualBlueGain" : 1024,
"gammaCr" : 0.78,
"gammaCb" : 0.78
}
},
{
"width" : 1280,
"height" : 720,
"hFlip" : true,
"vFlip" : true,
"ae" : {
"lock" : false,
"manual" : false,
"time" : {
"low" : 0.0016667,
"high" : 0.033
},
"regions" : [],
"targetY" : 0.4,
"manualMode" : "default",
"manualExposure" : 0.03333,
"manualGain" : 1,
"ev" : 0
},
"outputBuffers" : [],
"outputBuffersConfIndex" : 2,
"awb" : {
"lock" : false,
"manual" : false,
"gammaRed" : 0.7,
"gammaGreen" : 0.7,
"gammaBlue" : 0.7,
"regions" : [],
"manualRedGain" : 1024,
"manualGreenGain" : 1024,
"manualBlueGain" : 1024,
"gammaCr" : 0.78,
"gammaCb" : 0.78
}
}
]
}

View File

@@ -0,0 +1,318 @@
{
"default_person" : {
"debug" : false,
"description" : "person",
"name" : "person",
"max_track_age" : 300.0,
"is_static" : false,
"min_part_confidence" : 0.001,
"max_part_measure_age" : 5.0,
"max_audio_measure_age" : 10.0,
"min_audio_confidence" : 0.4,
"out_fov_age_factor" : 1.5,
"in_fov_margin" : 0.10,
"min_detect_request_age" : 5.0,
"speaking_timeout" : 1.5,
"speaking_threshold" : 0.25,
"head" : {
"name" : "head",
"debug" : false,
"identity" : {
"alpha" : 0.75,
"cull" : 0.1
},
"enable_back_projection" : true,
"default_ramge" : 2.5,
"use_pseudo_range" : true,
"extent_x" : 0.25,
"extent_y" : 0.25,
"extent_z" : 0.25,
"vel_decay" : 0.5,
"vel_max" : 1.9,
"linear_psd" : 10.0,
"min_state_covariance" : 0.0001,
"pseudo_range_covariance" : 0.9,
"auto_add_tracker" : false,
"auto_add_tracker_skip" : 20,
"pose_filter":0.0,
"tracker_type" : "tracker_2",
"tracker_1" : {
"tracker_class" : "color_tracker",
"image_tracker" : {
"debug" : false,
"image_debug" : false,
"name" : "A",
"use_image_velocity" : true,
"vel_scale" : 0.9,
"vel_filter" : 0.75,
"base_covar" : 220.0,
"image_width" : 640,
"image_height" : 360,
"track_confidence_filter" : 0.6,
"model_confidence_filter" : 0.9,
"min_confidence" : 0.05,
"measure_interval": 0.067
},
"color_tracker" : {
"model_debug" : false,
"track_debug" : false,
"drop_area_too_big" : 120000.0,
"drop_area_too_small" : 600.0,
"search_size_horizontal_scale" : 20,
"search_size_vertical_scale" : 20,
"area_filter" : 0.6,
"model" : {
"y_min" : 25,
"y_max" : 250,
"color_threshold_min" : 10,
"color_threshold_max" : 25
},
"camshift" : {
"max_iterations" : 6,
"area_scale" : 10.0,
"area_aspect" : 1.2
},
"kmeans" : {
"K" : 2,
"max_iterations" : 10,
"convergence" : 0.01
}
}
},
"tracker_2" : {
"tracker_class" : "abcshift_tracker",
"image_tracker" : {
"debug" : false,
"image_debug" : false,
"name" : "A",
"use_image_velocity" : true,
"vel_scale" : 0.9,
"vel_filter" : 0.75,
"base_covar" : 220.0,
"image_width" : 640,
"image_height" : 360,
"track_confidence_filter" : 0.6,
"model_confidence_filter" : 0.9,
"min_confidence" : 0.05,
"measure_interval": 0.067
},
"abcshift_tracker" : {
"drop_area_too_big" : 120000.0,
"drop_area_too_small" : 600.0,
"search_size_horizontal_scale" : 20,
"search_size_vertical_scale" : 20,
"area_filter" : 0.6,
"max_iterations" : 6,
"area_scale" : 1.3,
"area_aspect" : 1.2,
"bhattacharyya_threshold" : 0.5,
"model" : {
"y_min" : 5,
"y_max" : 250,
"color_threshold_min" : 5,
"color_threshold_max" : 10
},
"background" : {
"minX" : 0,
"maxX" : 255,
"binsX" : 256,
"minY" : 0,
"maxY" : 255,
"binsY" : 256
},
"foreground" : {
"minX" : 0,
"maxX" : 255,
"binsX" : 256,
"minY" : 0,
"maxY" : 255,
"binsY" : 256
}
}
},
"tracker_3" : {
"tracker_class" : "correlation_tracker",
"image_tracker" : {
"debug" : false,
"image_debug" : false,
"name" : "A",
"use_image_velocity" : true,
"vel_scale" : 0.9,
"vel_filter" : 0.75,
"base_covar" : 220.0,
"image_width" : 640,
"image_height" : 360,
"track_confidence_filter" : 0.6,
"model_confidence_filter" : 0.9,
"min_confidence" : 0.05,
"measure_interval": 0.067
},
"correlation_tracker" : {
"filter_size" : 6,
"num_scale_levels" : 5,
"scale_window_size" : 23,
"regularizer_space" : 0.001,
"nu_space" : 0.025,
"regularizer_scale" : 0.001,
"nu_scale" : 0.025,
"scale_pyramid_alpha" : 1.020,
"side_lobe_ratio_threshold": 12.0
}
},
"tracker_4" : {
"tracker_class" : "face_landmark_tracker",
"image_tracker" : {
"debug" : false,
"image_debug" : false,
"name" : "A",
"use_image_velocity" : true,
"vel_scale" : 0.9,
"vel_filter" : 0.75,
"base_covar" : 220.0,
"image_width" : 640,
"image_height" : 360,
"track_confidence_filter" : 0.6,
"model_confidence_filter" : 0.9,
"min_confidence" : 0.05,
"measure_interval": 0.067
},
"face_landmark_tracker" : { }
},
"tracker_5" : {
"tracker_class" : "composite_tracker",
"image_tracker" : {
"debug" : false,
"image_debug" : false,
"name" : "A",
"use_image_velocity" : true,
"vel_scale" : 0.9,
"vel_filter" : 0.75,
"base_covar" : 220.0,
"image_width" : 1280,
"image_height" : 720,
"track_confidence_filter" : 0.6,
"model_confidence_filter" : 0.9,
"min_confidence" : 0.05,
"measure_interval": 0.067
},
"composite_tracker" : {
"trackers" : {
"color" : {
"tracker_class" : "abcshift_tracker",
"image_tracker" : {
"debug" : false,
"image_debug" : false,
"name" : "A",
"use_image_velocity" : true,
"vel_scale" : 0.9,
"vel_filter" : 0.75,
"base_covar" : 220.0,
"image_width" : 640,
"image_height" : 360,
"track_confidence_filter" : 0.6,
"model_confidence_filter" : 0.9,
"min_confidence" : 0.05,
"measure_interval": 0.067
},
"abcshift_tracker" : {
"drop_area_too_big" : 120000.0,
"drop_area_too_small" : 600.0,
"search_size_horizontal_scale" : 20,
"search_size_vertical_scale" : 20,
"area_filter" : 0.6,
"max_iterations" : 6,
"area_scale" : 1.3,
"area_aspect" : 1.2,
"bhattacharyya_threshold" : 0.5,
"model" : {
"y_min" : 5,
"y_max" : 250,
"color_threshold_min" : 5,
"color_threshold_max" : 25
},
"background" : {
"minX" : 0,
"maxX" : 255,
"binsX" : 64,
"minY" : 0,
"maxY" : 255,
"binsY" : 64
},
"foreground" : {
"minX" : 0,
"maxX" : 255,
"binsX" : 64,
"minY" : 0,
"maxY" : 255,
"binsY" : 64
}
}
}
}
}
}
}
},
"default_motion" : {
"debug" : false,
"description" : "motion",
"name" : "motion",
"max_track_age" : 20.0,
"is_static" : false,
"max_part_measure_age" : 1.0,
"max_audio_measure_age" : 0.1,
"out_fov_age_factor" : 0.1,
"motion" : {
"name" : "motion",
"debug" : false,
"enable_back_projection" : true,
"default_ramge" : 2.5,
"use_pseudo_range" : true,
"extent_x" : 0.25,
"extent_y" : 0.25,
"extent_z" : 0.25,
"vel_decay" : 0.999,
"vel_limit" : 3.0,
"linear_psd" : 0.10,
"min_state_covariance" : 0.001,
"pseudo_range_covariance" : 0.5,
"fixed_pseudo_range" : 2.0,
"auto_add_tracker" : false,
"auto_add_tracker_skip" : 5,
"confidence_filter" : 0.9,
"pose_filter":0.0,
"tracker_type" : "tracker_1",
"tracker_1" : {
"tracker_class" : "motion_tracker",
"image_tracker" : {
"debug" : false,
"image_debug" : false,
"name" : "A",
"use_image_velocity" : false,
"vel_scale" : 0.9,
"vel_filter" : 0.75,
"base_covar" : 200.0,
"image_width" : 128,
"image_height" : 128,
"track_confidence_filter" : 0.6,
"model_confidence_filter" : 0.5,
"min_confidence" : 0.001,
"measure_interval": 0.001
},
"motion_tracker" : {
"background_threshold" : 5,
"drop_area_too_big" : 1600.0,
"drop_area_too_small" : 100.0,
"search_size_horizontal_scale" : 5,
"search_size_vertical_scale" : 5,
"camshift" : {
"max_iterations" : 6,
"area_scale" : 3.0,
"area_aspect" : 2.0
}
}
}
}
}
}

View File

@@ -0,0 +1,475 @@
{
"schemas" :[
{
"name" : "FaceDetectSchema",
"type" : "image_update_schema",
"enable" : true,
"predicate" : {
"type" : "face_detection_predicate",
"enable" : true,
"start" : 0,
"skip_with_tracks" : 150,
"skip_without_tracks" : 10,
"criteria" : {
"cameraIds" : [0]
}
},
"actions" :[
{
"name" : "FaceDetectAction",
"type" : "face_detection_action",
"enable" : true,
"policy_detector" : {
"criteria" : {
"cameraIds" : [0],
"dimensions" : [
{ "width" : 640, "height" : 360 },
{ "width" : 80, "height" : 45 }
],
"formats" : [3, 1],
"outputTypes" : [0, 2]
},
"detector" : {
"min_hint_width" : 40,
"min_hint_height" : 40
},
"policies" : [
{
"weight": 0.75,
"kind": "skincolor",
"sub_image_width" : 200,
"sub_image_height" : 200,
"extra_horizontal" : 20,
"extra_vertical" : 20
},
{
"weight": 0.25,
"kind": "gaussian",
"sub_image_width" : 200,
"sub_image_height" : 200,
"extra_horizontal" : 20,
"extra_vertical" : 20
}
]
}
},
{
"name" : "FaceTrackerInitAction",
"type" : "face_tracker_init_action",
"enable" : true,
"max_tracked" : 1
},
{
"name" : "FaceRecognitionAction",
"type" : "face_recognition_action",
"enable" : true,
"turn_threshold" : 0.5
}
]
},
{
"name" : "FaceTrackSchema",
"type" : "image_update_schema",
"enable" : true,
"actions" :[
{
"name" : "FaceTrackerUpdate",
"type" : "face_tracker_update_action",
"enable" : true
}
]
},
{
"name" : "FaceTrackPoseEstimateSchema",
"type" : "image_update_schema",
"enable" : false,
"predicate" : {
"type" : "face_tracker_pose_estimate_predicate",
"enable" : true,
"start" : 4,
"skip" : 11
},
"actions" :[
{
"name" : "FaceTrackerPoseEstimate",
"type" : "face_tracker_pose_estimate_action",
"enable" : true,
"hflip" : true,
"vflip" : false,
"criteria" : {
"cameraIds" : [0],
"dimensions" : [{ "width" : 640, "height" : 360 }],
"formats" : [3],
"outputTypes" : [0]
},
"detector" : {
"criteria" : {
"cameraIds" : [0],
"dimensions" : [{ "width" : 640, "height" : 360 }],
"formats" : [3],
"outputTypes" : [0]
},
"min_hint_width" : 80,
"min_hint_height" : 80
}
}
]
},
{
"name" : "FaceTrackReevaluateSchema",
"type" : "image_update_schema",
"enable" : true,
"predicate" : {
"type" : "face_reevaluate_predicate",
"enable" : true,
"start" : 0,
"skip" : 89
},
"actions" :[
{
"name" : "FaceTrackerRedetectAction",
"type" : "face_tracker_redetect_action",
"enable" : true,
"detector" : {
"criteria" : {
"cameraIds" : [0],
"dimensions" : [{ "width" : 640, "height" : 360 }],
"formats" : [3],
"outputTypes" : [0]
},
"min_hint_width" : 80,
"min_hint_height" : 80
}
}
]
},
{
"name" : "FaceTrainSchema",
"type" : "image_update_schema",
"enable" : true,
"predicate" : {
"type" : "face_training_predicate",
"enable" : true,
"criteria" : {
"cameraIds" : [0]
}
},
"actions" :[
{
"name" : "FaceTrainingAction",
"type" : "face_training_action",
"enable" : true,
"criteria" : {
"cameraIds" : [0],
"dimensions" : [{ "width" : 640, "height" : 360 }],
"outputTypes" : [0]
}
}
]
},
{
"name" : "EntityDetailSchema",
"type" : "image_update_schema",
"enable" : true,
"actions" :[
{
"name" : "EntityDetailAction",
"type" : "entity_detail_action",
"enable" : true,
"detector" : {
"criteria" : {
"dimensions" : [{ "width" : 640, "height" : 360 }],
"formats" : [3],
"outputTypes" : [0]
}
}
}
]
},
{
"name" : "VisualAwarenessSchema",
"type" : "image_update_schema",
"enable" : true,
"actions" : [
{
"name" : "VisualAwarenessUpdateAction",
"type" : "visual_awareness_update_action",
"enable" : true
}
]
},
{
"name" : "BarcodeSchema",
"type" : "image_update_schema",
"enable" : true,
"actions" :[
{
"name" : "BarcodeRequestAction",
"type" : "barcode_request_action",
"enable" : true,
"reader":{
"types": {
"EAN8" : false,
"UPCE" : false,
"ISBN10" : false,
"UPCA" : false,
"EAN13" : false,
"ISBN13" : false,
"I25" : false,
"CODE39" : false,
"PDF417" : false,
"QRCODE" : true,
"CODE128" : false
}
},
"criteria" : {
"cameraIds" : [0],
"dimensions" : [{ "width" : 1280, "height" : 720 }],
"outputTypes" : [0]
}
}
]
},
{
"name" : "ControlChangeSchema",
"type" : "image_update_schema",
"enable": true,
"actions": [
{
"name" : "ControlChangeRequestAction",
"type" : "control_change_request_action",
"enable" : true,
"defaultResetTimeout": 7000
}
]
},
{
"name" : "MotionSchema",
"type" : "image_update_schema",
"enable" : true,
"actions" :[
{
"name" : "MotionImagerAction",
"type" : "motion_imager_action",
"enable" : true,
"moving_delay" : 400,
"image_width" : 128,
"image_height" : 128,
"accumulator_alpha" : 0.75,
"criteria" : {
"cameraIds" : [0],
"dimensions" : [{ "width" : 320, "height" : 180 }],
"outputTypes" : [0]
},
"motion_timeout" : 100
},
{
"name" : "MotionDetectionAction",
"type" : "motion_detection_action",
"enable" : true,
"moving_delay" : 400,
"detector": {
"min_width" : 10,
"min_height" : 10,
"criteria" : {
"cameraIds" : [0]
},
"threshold" : {
"dynamic": true,
"low": 5,
"high": 50,
"ae":{
"gain":16.0,
"time":0.0333
},
"awb":{
"red":4.0,
"green":4.0,
"blue": 4.0
}
}
}
},
{
"name" : "MotionTrackerInitAction",
"type" : "motion_tracker_init_action",
"enable" : true,
"moving_delay" : 400,
"max_tracked" : 2,
"pool" : {
"format" : 1,
"width" : 128,
"height" : 128,
"size" : 8
}
},
{
"name" : "MotionTrackerUpdateAction",
"type" : "motion_tracker_update_action",
"enable" : true,
"moving_delay" : 400,
"pool" : {
"format" : 1,
"width" : 128,
"height" : 128,
"size" : 8
}
}
]
},
{
"name" : "FaceTimeSchema",
"type" : "time_update_schema",
"enable" : true,
"actions" :[
{
"name" : "FaceTimeAction",
"type" : "face_time_action",
"enable" : true,
"drop_radius" : 0.3,
"fence_radius" : 4.0,
"ceiling_height": 2.0,
"floor_height": -2.0
}
]
},
{
"name" : "FaceEvaluateTimeSchema",
"type" : "time_update_schema",
"enable" : true,
"predicate" : {
"type" : "min_period_predicate",
"enable" : true,
"min_period" : 1.1
},
"actions" :[
{
"name" : "PersonEvaluationAction",
"type" : "person_evaluation_action",
"enable" : true,
"unknown_age_limit":1.5,
"not_trained_age_limit":20.0,
"refresh_limit":50.0
},
{
"name" : "PresenceTimeAction",
"type" : "presence_time_action",
"enable" : true
}
]
},
{
"name" : "SpeakerTimeSchema",
"type" : "time_update_schema",
"enable" : true,
"actions" :[
{
"name" : "SpeakerTimeAction",
"type" : "speaker_time_action",
"enable" : true,
"expiration": 60000
}
]
},
{
"name" : "AwarenessTimeSchema",
"type" : "time_update_schema",
"enable" : true,
"actions" :[
{
"name" : "AwarenessTimeAction",
"type" : "awareness_time_action",
"enable" : true
}
]
},
{
"name" : "MotionTimeSchema",
"type" : "time_update_schema",
"enable" : true,
"actions" :[
{
"name" : "MotionTimeAction",
"type" : "motion_time_action",
"enable" : true,
"drop_radius" : 0.3,
"fence_radius" : 4.0
}
]
},
{
"name" : "AudioTimeSchema",
"type" : "time_update_schema",
"enable" : true,
"actions" :[
{
"name" : "AudioTimeAction",
"type" : "audio_time_action",
"enable" : true,
"event_timeout" : 5.0
}
]
},
{
"name" : "PresenceTimeSchema",
"type" : "time_update_schema",
"enable" : true,
"actions" :[
{
"name" : "PresenceTimeAction",
"type" : "presence_time_action",
"enable" : true
}
]
},
{
"name" : "AudioDetectSchema",
"type" : "audio_update_schema",
"enable" : true,
"actions" :[
{
"name" : "AudioDetectionAction",
"type" : "audio_detection_action",
"enable" : true
},
{
"name" : "AudioMeasurementAction",
"type" : "audio_measurement_action",
"enable" : true,
"audio_angle_tolerance" : 0.5,
"audio_time_tolerance" : 0.35,
"in_fov_margin" : 0.1
}
]
},
{
"name" : "AudioAwarenessSchema",
"type" : "audio_update_schema",
"enable" : true,
"actions" :[
{
"name" : "AudioAwarenessAction",
"type" : "audio_awareness_action",
"enable" : true
}
]
},
{
"name" : "AxisUpdateSchema",
"type" : "axis_update_schema",
"enable" : true,
"actions" :[
{
"name" : "GeometryUpdateAction",
"type" : "geometry_update_action",
"enable" : true
},
{
"name" : "MotionTrackerAxisUpdateAction",
"type" : "motion_tracker_axis_update_action",
"enable" : true
}
]
}
]
}

View File

@@ -0,0 +1,212 @@
{
"schemas" :[
{
"name" : "EntityDetailSchema",
"type" : "image_update_schema",
"enable" : true,
"actions" :[
{
"name" : "EntityDetailAction",
"type" : "entity_detail_action",
"enable" : true,
"detector" : {
"criteria" : {
"dimensions" : [{ "width" : 640, "height" : 360 }],
"formats" : [3],
"outputTypes" : [0]
}
}
}
]
},
{
"name" : "VisualAwarenessSchema",
"type" : "image_update_schema",
"enable" : true,
"actions" : [
{
"name" : "VisualAwarenessUpdateAction",
"type" : "visual_awareness_update_action",
"enable" : true
}
]
},
{
"name" : "BarcodeSchema",
"type" : "image_update_schema",
"enable" : true,
"actions" :[
{
"name" : "BarcodeRequestAction",
"type" : "barcode_request_action",
"enable" : true,
"reader":{
"types": {
"EAN8" : false,
"UPCE" : false,
"ISBN10" : false,
"UPCA" : false,
"EAN13" : false,
"ISBN13" : false,
"I25" : false,
"CODE39" : false,
"PDF417" : false,
"QRCODE" : true,
"CODE128" : false
}
},
"criteria" : {
"cameraIds" : [0],
"dimensions" : [{ "width" : 1280, "height" : 720 }],
"outputTypes" : [0]
}
}
]
},
{
"name" : "ControlChangeSchema",
"type" : "image_update_schema",
"enable": true,
"actions": [
{
"name" : "ControlChangeRequestAction",
"type" : "control_change_request_action",
"enable" : true,
"defaultResetTimeout": 7000
}
]
},
{
"name" : "FaceTimeSchema",
"type" : "time_update_schema",
"enable" : true,
"actions" :[
{
"name" : "FaceTimeAction",
"type" : "face_time_action",
"enable" : true,
"drop_radius" : 0.3,
"fence_radius" : 4.0,
"ceiling_height": 2.0,
"floor_height": -2.0
}
]
},
{
"name" : "AwarenessTimeSchema",
"type" : "time_update_schema",
"enable" : true,
"actions" :[
{
"name" : "AwarenessTimeAction",
"type" : "awareness_time_action",
"enable" : true
}
]
},
{
"name" : "MotionTimeSchema",
"type" : "time_update_schema",
"enable" : true,
"actions" :[
{
"name" : "MotionTimeAction",
"type" : "motion_time_action",
"enable" : true,
"drop_radius" : 0.3,
"fence_radius" : 4.0
}
]
},
{
"name" : "AudioTimeSchema",
"type" : "time_update_schema",
"enable" : true,
"actions" :[
{
"name" : "AudioTimeAction",
"type" : "audio_time_action",
"enable" : true,
"event_timeout" : 5.0
}
]
},
{
"name" : "PresenceTimeSchema",
"type" : "time_update_schema",
"enable" : true,
"actions" :[
{
"name" : "PresenceTimeAction",
"type" : "presence_time_action",
"enable" : true
}
]
},
{
"name" : "AudioDetectSchema",
"type" : "audio_update_schema",
"enable" : true,
"actions" :[
{
"name" : "AudioDetectionAction",
"type" : "audio_detection_action",
"enable" : true
},
{
"name" : "AudioMeasurementAction",
"type" : "audio_measurement_action",
"enable" : true,
"audio_angle_tolerance" : 0.5,
"audio_time_tolerance" : 0.35,
"in_fov_margin" : 0.1
}
]
},
{
"name" : "AudioPresenceSchema",
"type" : "audio_update_schema",
"enable" : true,
"actions" :[
{
"name" : "SpeakerPresenceAudioAction",
"type" : "speaker_presence_audio_action",
"enable" : true,
"audio_angle_tolerance" : 0.5,
"audio_time_tolerance" : 0.35,
"in_fov_margin" : 0.1,
"presence_timeout" : 10.0
}
]
},
{
"name" : "AudioAwarenessSchema",
"type" : "audio_update_schema",
"enable" : true,
"actions" :[
{
"name" : "AudioAwarenessAction",
"type" : "audio_awareness_action",
"enable" : true
}
]
},
{
"name" : "AxisUpdateSchema",
"type" : "axis_update_schema",
"enable" : true,
"actions" :[
{
"name" : "GeometryUpdateAction",
"type" : "geometry_update_action",
"enable" : true
},
{
"name" : "MotionTrackerAxisUpdateAction",
"type" : "motion_tracker_axis_update_action",
"enable" : true
}
]
}
]
}

View File

@@ -0,0 +1,495 @@
{
"schemas" :[
{
"name" : "FaceDetectSchema",
"type" : "image_update_schema",
"enable" : true,
"predicate" : {
"type" : "face_detection_predicate",
"enable" : true,
"start" : 0,
"skip_with_tracks" : 30,
"skip_without_tracks" : 10,
"criteria" : {
"cameraIds" : [0]
}
},
"actions" :[
{
"name" : "FaceDetectAction",
"type" : "face_detection_action",
"enable" : true,
"policy_detector" : {
"criteria" : {
"cameraIds" : [0],
"dimensions" : [
{ "width" : 1280, "height" : 720 },
{ "width" : 80, "height" : 45 }
],
"formats" : [3, 1],
"outputTypes" : [0, 2]
},
"detector" : {
"min_hint_width" : 40,
"min_hint_height" : 40
},
"policies" : [
{
"weight": 0.75,
"kind": "skincolor",
"sub_image_width" : 200,
"sub_image_height" : 200,
"extra_horizontal" : 20,
"extra_vertical" : 20
},
{
"weight": 0.25,
"kind": "gaussian",
"sub_image_width" : 200,
"sub_image_height" : 200,
"extra_horizontal" : 20,
"extra_vertical" : 20
}
]
}
},
{
"name" : "FaceTrackerInitAction",
"type" : "face_tracker_init_action",
"enable" : true,
"max_tracked" : 3
},
{
"name": "FaceTrackerIDAction",
"type": "face_tracker_id_action",
"enable": true,
"criteria": {
"cameraIds" : [0],
"dimensions" : [{ "width" : 1280, "height" : 720 }],
"formats" : [3],
"outputTypes" : [0]
}
}
]
},
{
"name" : "FaceTrackSchema",
"type" : "image_update_schema",
"enable" : true,
"actions" :[
{
"name" : "FaceTrackerUpdate",
"type" : "face_tracker_update_action",
"enable" : true
}
]
},
{
"name" : "FaceTrackPoseEstimateSchema",
"type" : "image_update_schema",
"enable" : false,
"predicate" : {
"type" : "face_tracker_pose_estimate_predicate",
"enable" : true,
"start" : 4,
"skip" : 11
},
"actions" :[
{
"name" : "FaceTrackerPoseEstimate",
"type" : "face_tracker_pose_estimate_action",
"enable" : true,
"hflip" : true,
"vflip" : false,
"criteria" : {
"cameraIds" : [0],
"dimensions" : [{ "width" : 640, "height" : 360 }],
"formats" : [3],
"outputTypes" : [0]
},
"detector" : {
"criteria" : {
"cameraIds" : [0],
"dimensions" : [{ "width" : 640, "height" : 360 }],
"formats" : [3],
"outputTypes" : [0]
},
"min_hint_width" : 80,
"min_hint_height" : 80
}
}
]
},
{
"name" : "FaceTrackRedetectSchema",
"type" : "image_update_schema",
"enable" : true,
"predicate" : {
"type" : "face_reevaluate_predicate",
"enable" : true,
"start" : 0,
"skip" : 3
},
"actions" :[
{
"name" : "PersonRedetectAction",
"type" : "person_redetect_action",
"enable" : true,
"detector" : {
"criteria" : {
"cameraIds" : [0],
"dimensions" : [{ "width" : 1280, "height" : 720 }],
"formats" : [3],
"outputTypes" : [0]
},
"min_hint_width" : 80,
"min_hint_height" : 80
}
}
]
},
{
"name" : "DeferredDetectSchema",
"type" : "image_update_schema",
"enable" : true,
"actions" :[
{
"name" : "DeferredDetectionAction",
"type" : "deferred_detection_action",
"enable" : true,
"detector" : {
"criteria" : {
"cameraIds" : [0],
"dimensions" : [{ "width" : 640, "height" : 360 }],
"formats" : [3],
"outputTypes" : [0]
},
"min_hint_width" : 80,
"min_hint_height" : 80
},
"max_tracked": 3
}
]
},
{
"name" : "FaceTrainSchema",
"type" : "image_update_schema",
"enable" : true,
"predicate" : {
"type" : "face_training_predicate",
"enable" : true
},
"actions" :[
{
"name" : "FaceTrainingAction",
"type" : "face_training_action",
"enable" : true
}
]
},
{
"name" : "EntityDetailSchema",
"type" : "image_update_schema",
"enable" : true,
"actions" :[
{
"name" : "EntityDetailAction",
"type" : "entity_detail_action",
"enable" : true,
"detector" : {
"criteria" : {
"dimensions" : [{ "width" : 640, "height" : 360 }],
"formats" : [3],
"outputTypes" : [0]
}
}
}
]
},
{
"name" : "VisualAwarenessSchema",
"type" : "image_update_schema",
"enable" : true,
"actions" : [
{
"name" : "VisualAwarenessUpdateAction",
"type" : "visual_awareness_update_action",
"enable" : true
}
]
},
{
"name" : "BarcodeSchema",
"type" : "image_update_schema",
"enable" : true,
"actions" :[
{
"name" : "BarcodeRequestAction",
"type" : "barcode_request_action",
"enable" : true,
"reader":{
"types": {
"EAN8" : false,
"UPCE" : false,
"ISBN10" : false,
"UPCA" : false,
"EAN13" : false,
"ISBN13" : false,
"I25" : false,
"CODE39" : false,
"PDF417" : false,
"QRCODE" : true,
"CODE128" : false
}
},
"criteria" : {
"cameraIds" : [0],
"dimensions" : [{ "width" : 1280, "height" : 720 }],
"outputTypes" : [0]
}
}
]
},
{
"name" : "ControlChangeSchema",
"type" : "image_update_schema",
"enable": true,
"actions": [
{
"name" : "ControlChangeRequestAction",
"type" : "control_change_request_action",
"enable" : true,
"defaultResetTimeout": 7000
}
]
},
{
"name" : "MotionSchema",
"type" : "image_update_schema",
"enable" : true,
"actions" :[
{
"name" : "MotionImagerAction",
"type" : "motion_imager_action",
"enable" : true,
"moving_delay" : 400,
"image_width" : 128,
"image_height" : 128,
"accumulator_alpha" : 0.75,
"criteria" : {
"cameraIds" : [0],
"dimensions" : [{ "width" : 320, "height" : 180 }],
"outputTypes" : [0]
},
"motion_timeout" : 100
},
{
"name" : "MotionDetectionAction",
"type" : "motion_detection_action",
"enable" : true,
"moving_delay" : 400,
"detector": {
"min_width" : 10,
"min_height" : 10,
"criteria" : {
"cameraIds" : [0]
},
"threshold" : {
"dynamic": true,
"low": 5,
"high": 50,
"ae":{
"gain":16.0,
"time":0.0333
},
"awb":{
"red":4.0,
"green":4.0,
"blue": 4.0
}
}
}
},
{
"name" : "MotionTrackerInitAction",
"type" : "motion_tracker_init_action",
"enable" : true,
"moving_delay" : 400,
"max_tracked" : 3,
"pool" : {
"format" : 1,
"width" : 128,
"height" : 128,
"size" : 8
}
},
{
"name" : "MotionTrackerUpdateAction",
"type" : "motion_tracker_update_action",
"enable" : true,
"moving_delay" : 400,
"pool" : {
"format" : 1,
"width" : 128,
"height" : 128,
"size" : 8
}
}
]
},
{
"name" : "FaceTimeSchema",
"type" : "time_update_schema",
"enable" : true,
"actions" :[
{
"name" : "FaceTimeAction",
"type" : "face_time_action",
"enable" : true,
"drop_radius" : 0.3,
"fence_radius": 4.0,
"ceiling_height": 2.0,
"floor_height": -2.0
}
]
},
{
"name" : "FaceEvaluateTimeSchema",
"type" : "time_update_schema",
"enable" : true,
"predicate" : {
"type" : "min_period_predicate",
"enable" : true,
"min_period" : 1.1
},
"actions" :[
{
"name" : "PersonEvaluationAction",
"type" : "person_evaluation_action",
"enable" : true,
"unknown_age_limit":10.0,
"not_trained_age_limit":20.0,
"refresh_limit":50.0
},
{
"name" : "PresenceTimeAction",
"type" : "presence_time_action",
"enable" : true
}
]
},
{
"name" : "SpeakerTimeSchema",
"type" : "time_update_schema",
"enable" : true,
"actions" :[
{
"name" : "SpeakerTimeAction",
"type" : "speaker_time_action",
"enable" : true,
"expiration": 60000
}
]
},
{
"name" : "AwarenessTimeSchema",
"type" : "time_update_schema",
"enable" : true,
"actions" :[
{
"name" : "AwarenessTimeAction",
"type" : "awareness_time_action",
"enable" : true
}
]
},
{
"name" : "MotionTimeSchema",
"type" : "time_update_schema",
"enable" : true,
"actions" :[
{
"name" : "MotionTimeAction",
"type" : "motion_time_action",
"enable" : true,
"drop_radius" : 0.3,
"fence_radius": 4.0
}
]
},
{
"name" : "AudioTimeSchema",
"type" : "time_update_schema",
"enable" : true,
"actions" :[
{
"name" : "AudioTimeAction",
"type" : "audio_time_action",
"enable" : true,
"event_timeout" : 5.0
}
]
},
{
"name" : "PresenceTimeSchema",
"type" : "time_update_schema",
"enable" : true,
"actions" :[
{
"name" : "PresenceTimeAction",
"type" : "presence_time_action",
"enable" : true
}
]
},
{
"name" : "AudioDetectSchema",
"type" : "audio_update_schema",
"enable" : true,
"actions" :[
{
"name" : "AudioDetectionAction",
"type" : "audio_detection_action",
"enable" : true
},
{
"name" : "AudioMeasurementAction",
"type" : "audio_measurement_action",
"enable" : true,
"audio_angle_tolerance" : 0.5,
"audio_time_tolerance" : 0.35,
"in_fov_margin" : 0.1
}
]
},
{
"name" : "AudioAwarenessSchema",
"type" : "audio_update_schema",
"enable" : true,
"actions" :[
{
"name" : "AudioAwarenessAction",
"type" : "audio_awareness_action",
"enable" : true
}
]
},
{
"name" : "AxisUpdateSchema",
"type" : "axis_update_schema",
"enable" : true,
"actions" :[
{
"name" : "GeometryUpdateAction",
"type" : "geometry_update_action",
"enable" : true
},
{
"name" : "MotionTrackerAxisUpdateAction",
"type" : "motion_tracker_axis_update_action",
"enable" : true
}
]
}
]
}

1
V3.1/mode.json Normal file
View File

@@ -0,0 +1 @@
{"mode": "normal"}

BIN
openjibos.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 183 KiB