本文へスキップ

技術者経歴書

カ

J.R.

フルスタックエンジニア / AI・バックエンド

Python を軸に、機械学習の実装から本番運用レベルのバックエンド開発まで、2019年から一貫して担当。現在は日本でレガシー資産のモダナイゼーション(LLM 活用)に従事。

スクロール

ABOUT

自己PR

私の強みは、新しい事物に対する強い好奇心と積極的に挑戦する姿勢です。新しい技術やツールが登場すると、まず自分で学び、実際に試してきました。その結果、素早く習得し、新しい環境にも柔軟に適応できます。変化を前向きに受け入れ、新しい機会を楽しみながら成長していくことができます。

学歴

  • 河北経貿大学(学士)

    数学・応用数学

    2015.09 – 2019.06 ・ GPA 3.97 / 5・学科内順位 9 / 30

  • SANKO日本語学校 東京 ↗

    日本語

    2024.07 – 2025.11 ・ 入学 2024年7月 / 2025年11月 退学・JLPT N2 取得

プロフィール

性別
男性
年齢
30歳
国籍
中国
最寄り駅
亀有駅
来日
2024.07
実務経験
約 6 年
所在地
東京

SKILLS

技術スキル

Python バックエンド開発

Django・Tornado・Flask による Web アプリの開発と保守。MySQL / MongoDB / Redis / Kafka / Milvus を用いたデータ処理・蓄積。RESTful および Protobuf ベースの gRPC でのインターフェース設計・実装・連携。

機械学習・コンピュータビジョン

scikit-learn による回帰・クラスタリング等のデータ分析。PyTorch による物体検出(Faster R-CNN)・物体認識(ResNet)・YOLOv8 の適用。NVIDIA CUDA および Huawei Ascend ACL 上での推論高速化と C++ 連携。

フロントエンド

Vue 2 / Vue-Element-Admin による管理画面の構築。React・TypeScript・Angular での画面開発。ECharts によるデータ可視化。

複数言語

C++11 でのプロジェクト参加。Go による API・業務ロジック実装。Rust への移行プロジェクトの経験。

デプロイ・運用

Docker / docker-compose / Nginx / Shell スクリプトによる構築とデプロイ。AWS・Azure 上での本番環境構築と運用保守。Fortify 等での脆弱性診断対応。

データ処理・その他

XPath ベース/API ベースのクローラ開発。NumPy・Pandas によるデータ操作。OpenCV による画像処理、FFmpeg による動画の回転・アフィン変換・切り出し。LLM / プロンプトエンジニアリングの業務活用(社内向け GPT ボットの構築経験あり)。

技術経験マトリクス

◎:実務経験 1 年以上 / ○:実務経験あり / △:知識あり

OS

  • Windows ◎
  • Windows Server ◎
  • Linux ◎
  • macOS ◎
  • AWS ◎
  • Azure ◎

言語

  • Python ◎
  • Vue.js ◎
  • React.js ◎
  • Angular.js ◎
  • TypeScript ◎
  • JavaScript ◎
  • HTML ◎
  • jQuery ◎
  • AJAX ◎
  • Go ◎
  • Shell Script ◎
  • C ○
  • C++ ○
  • VC++ ○
  • COBOL △
  • C# ○

DB

  • MySQL ◎
  • PostgreSQL ◎
  • SQL Server ◎
  • SQLite ◎
  • MongoDB ◎
  • Redis ◎
  • Milvus ◎

Web・AP サーバ

  • Nginx ◎
  • Apache ◎
  • IIS ○
  • Tomcat ○

その他

  • Docker / docker-compose ◎
  • Kafka ◎
  • PyTorch ◎
  • scikit-learn ◎
  • OpenCV / FFmpeg ◎
  • gRPC / Protobuf ○
  • Ray ○
  • Selenium ◎
  • LLM / Prompt Engineering ◎
  • CUDA / Huawei Ascend ACL ○
  • Django / DRF ◎
  • Tornado ◎
  • Celery ○
  • Elasticsearch ○
  • Cython ◎
  • SWIG ○
  • TensorRT ◎
  • Suricata ○
  • ANTLR4 / Lark ◎
  • RAG / MCP ◎

スキル総括

得意領域
深層学習(CV 方向)機械学習データ分析Web 開発クローラ
言語
Python(実務)Vue / React / TypeScript(実務)GoC++Rust(知識)
基盤・ミドルウェア
MySQL / MongoDB / PostgreSQL / RedisKafka / MilvusDocker / docker-compose / NginxAWS / Azure

語学

  • 中国語 母語

    母国語

  • 日本語 JLPT N2 / 簡単な業務会話レベル

    日本語学校で学習(2024年7月〜2025年11月)

  • 英語 技術文書の読み書き

資格

  • 2026.07 日本語能力試験 JLPT N2 取得

EXPERIENCE

職務経歴

各社をクリックすると、担当・案件・システムのデータフロー・学びを見られます。

  1. 2025.10 – 現在 1年1ヶ月

    株式会社◯◯(SES)

    開発エンジニア(Python) ・ 受託開発・レガシーシステムのモダナイゼーション(SES)

    日本で SES として、レガシーシステムのモダナイゼーションに関わる開発に従事。ANTLR4 + RAG + MCP による COBOL 機能説明書の自動生成、大手電機メーカーの部門システム向け人員・組織連携ツールの開発、そして担当者として CMD → C# の「ルール+生成 AI」自動変換基盤を設計した。

    • Python
    • Lark
    • ANTLR4
    • Azure OpenAI
    • MCP
    • ChromaDB
    3 件の案件
  2. 2023.07 – 2024.07 1年1ヶ月

    広州辰創科技発展有限公司

    Python 開発エンジニア ・ シミュレーション・推演(研究向けソフト)

    シミュレーション・推演の製品ラインでバックエンドとエージェント開発を担当。Go(Gin)で戦場シミュレーションの業務メインサービス・エンジンのライフサイクル管理・多人数共同編集を実装し、Python で C++ のゲーム推演基盤と連携して赤・青のエージェントとリアルタイム監視ツールを開発した。

    • Go
    • Gin
    • Python
    • Tornado
    • MongoDB
    • MySQL
    2 件の案件
  3. 2022.08 – 2023.07 1年

    浙江木鏈科技有限公司

    Python 開発エンジニア ・ 産業制御セキュリティ

    産業制御セキュリティ分野での Python バックエンド。バイパス型トラフィック監査システムのトラフィック処理経路、ホワイトリスト検知エンジン、Django REST API に参画し、Suricata によるブラックリスト検知を統合。27 種の産業プロトコルの詳細解析に対応した。

    • Python
    • Django / DRF
    • Celery
    • Kafka
    • Redis
    • PostgreSQL
    1 件の案件
  4. 2020.08 – 2022.08 2年1ヶ月

    人民中科智能技術有限公司

    アルゴリズム応用エンジニア ・ AI × コンテンツ安全

    コンテンツ安全の中台でアルゴリズム調整とクロス言語ラッパーを担当。Ray で 10 種類以上のアルゴリズム機能を編成し、SWIG で C++ SDK を Python に接続。昇腾 Atlas 推論 SDK にも参画し、オフライン配備可能なクロスモーダル検索製品を単独で納品した。

    • Python
    • C++11
    • Ray
    • Kafka
    • Protobuf
    • gRPC
    3 件の案件
  5. 2019.07 – 2020.07 1年1ヶ月

    北京雲上作科技有限公司

    ソフトウェア開発エンジニア ・ AI × 教育

    AI × 教育分野でのアルゴリズム実装とフルスタック開発。Mask R-CNN + ResNet による授業行動のリアルタイム分析・警告、社内のデータ注釈・学習基盤の構築、オンライン授業モニタリングの統計バックエンド、顔認証、スクリーンショット認識サービスを担当した。

    • Python
    • PyTorch
    • Mask R-CNN
    • ResNet
    • YOLOv5
    • MXNet
    4 件の案件

成長の歩み

  1. 01

    在学中(数学専攻):Python の scikit-learn によるデータ分析、NumPy / Pandas を習得。当時の顔認識ブームを受け、C++ の OSS 顔認識フレームワーク SeetaFace を学習。

  2. 02

    AI × 教育に入社後:業務ロジックの中で PyTorch による Faster R-CNN・ResNet を実装。Web は Tornado、フロントは HTML/JS/CSS から Vue へ移行し、計算機科学の知識を広げた。

  3. 03

    AI × 世論監視の時期:CV・OCR・NLP の応用に触れ、主業務のアルゴリズムプログラムで Kafka による複数プラットフォーム統合、Docker とクラウド運用を経験。モデルの蒸留・枝刈り、CUDA / Ascend でのハード層高速化を学んだ。

  4. 04

    セキュリティ業界:一般的な攻撃手法と権限昇格を理解。Django に習熟し、C++ から Rust への移行、Python 高速化のための Cython 化や Go への置き換えも経験。

  5. 05

    シミュレーション・推演ソフトの時期:初めて Go でサーバーサイド(Gin・WebSocket・goroutine)を書き、Python で C++ 推演基盤との連携とエージェント開発も担当。

  6. 06

    日本にて:2024年7月に来日して日本語学校で日本語を学び N2 を取得(2025年11月に退学)。その後 SES として、COBOL 資産の機能説明書の自動生成(ANTLR4 + RAG + MCP)、人員・組織の自動連携ツール、CMD → C# 自動変換基盤(ルール+生成 AI)の開発に従事。

WORKS

案件実績

日本 2026.04 – 現在

レガシーバッチ(CMD/JCL)→ C# 自動変換基盤の設計・開発

公共(自治体向け基幹システムの移行) ・ 担当者(アーキテクチャ設計・コア実装・レビュー)

詳細を見る
  • Python
  • Lark (LALR)
  • regex
  • Azure OpenAI
  • C# / .NET
  • pytest
  • +1

長年稼働してきた Windows バッチ(CMD、Shift-JIS)を、自社バッチフレームワーク上の C# へ移行するための自動変換基盤。手作業での書き換えは工数が大きく業務ロジックの等価性担保も難しいため、「ルール変換+生成 AI 補完」の 2 段階方式を採用し、「変換できないほうが、業務ロジックを黙って変えるよりよい」を設計方針とした。

システム構成

2 段階変換アーキテクチャ
レガシー CMD スクリプトShift-JIS バッチ 第 1 段階 · 確定的な変換パイプライン 前処理8 種の正規化 LALR 構文解析Lark 約 490 行の文法 AST 変換27 種のノード C# 生成クラス / Main / using ルールエンジン + 変数展開内蔵 33 コマンド + 対応表 1,084 件 第 1 段階の成果物.cs(TODO を含む)· .cs.ast · .utf8.cmd 第 2 段階 · AI による CALL :LABEL の補完 3 者の対応付けTODO·AST·CMD キャッシュ照会SHA256 ハッシュ Azure OpenAItemperature 0 2 層検証構造 + 業務意味 フィードバック付き再試行最大 7 回、それでも不可なら TODO を残す 最終成果物.label.ai.cs(元の .cs は上書きしない)

担当業務

  • 2 段階アーキテクチャの設計:第 1 段階は決定的ルールで大半を変換(前処理 → Lark 構文解析 → AST → ルールエンジン → C# 生成)、第 2 段階はルール化できない CALL :ラベル のサブルーチンのみ LLM でメソッド化し、AI の適用範囲とリスクを最小化
  • CMD 文法のモデリング:約 490 行の Lark(LALR)文法を設計・拡張。リダイレクトの任意位置出現、< > & | の曖昧性、%VAR:old=new% 置換、IF/ELSE の多様な括弧表記、日本語を含むラベル名など cmd.exe 特有の癖に対応
  • 入力ゆれを吸収する前処理層(8 種):改行コード混在、行末の閉じ括弧、複数行 ELSE、ECHO 内の記号、全角空白などを意味を変えずに正規化し、文法をシンプルに維持
  • AST とルールエンジン:27 種の AST ノード、内蔵コマンド 33 種+外部コマンド対応表 1,084 件(「ジョブプロセス」「ジョブフロー」の 2 つの呼び出しモード)。変数展開は文字列・引数行・整数式の 3 コンテキストで実装
  • 生成 AI によるサブルーチン変換と「意味保存」検証:LabelMapper で .cs の TODO・.cs.ast の呼び出しノード・.cmd 原文の 3 者を対応付け、構造チェックと業務意味チェック(ERRORLEVEL・キャンセル処理・エラー分岐・ステータス設定の保持)を自動実施。不合格は理由を付けて最大 7 回再生成し、それでも不可なら TODO を残して人手確認へ
  • コストと安定性:ラベルブロックの正規化内容の SHA256 をキーとする JSON キャッシュ、429/5xx の指数バックオフ、Chat Completions 非対応時の Responses API への自動フォールバック、temperature=0 で再現性を確保
  • 品質サイクル:約 465 件のテストで文法層・変換層を検証。一括実行で出力される .cs.ERR を「CMD 原文の問題/文法の不足/コードの不具合/環境」の 4 種に分類し、よくあるエラーを一覧化してチームで共有

成果

  • ✓ 移行の過程で、レガシー CMD に潜む不具合の可能性(例:& の欠落により GOTO が実際には実行されない、ECHO で SQL を書き出す際に < をエスケープしていない)を複数検出し、記録
  • ✓ 例:117 行のデータ連携ジョブ CMD から 156 行の C# を自動生成。残る 11 件の TODO はいずれも対応表未登録の外部コマンドで、対応表の追加で解消可能

データフロー

レガシー CMD → 文字コード判定 → 入力正規化 → Lark 構文解析 → AST → ルールエンジン → C# 生成。TODO のサブルーチン → 3 者対応付け → LLM 生成 → 2 層検証(最大 7 回再試行)→ .label.ai.cs

作業範囲: 外部設計 / 機能設計 / 内部設計 / 製造 / 単体試験
  • Python
  • Lark (LALR)
  • regex
  • Azure OpenAI
  • C# / .NET
  • pytest
  • Git
所属:株式会社◯◯(SES) 会社ページへ
日本 2026.01 – 2026.03(3ヶ月)

部門向けプロジェクト管理システム 人員・組織自動連携ツール

製造業(大手電機メーカー) ・ Python 連携ツールの開発・テスト・本番リリース・運用引継ぎ(派遣)

詳細を見る
  • Python
  • Selenium
  • paramiko
  • MySQL / MariaDB
  • Redmine REST API
  • SendGrid
  • +3

大手電機メーカーのソフトウェア技術部門が、Redmine をベースに自作した部門向けプロジェクト管理・状況報告システム(Angular + Go + Redmine)。人員・組織データは社内人員名簿から取得する必要があるが、利用できる外部インターフェースがないため、Selenium でメンバーと組織構成を取得し、Redmine のアカウント・部/課組織・権限グループへ自動反映するツールを担当した(4 部・約 30 課)。

システム構成

連携ツールの構成(自分の担当範囲)
① 顧客の社内ネットワーク · WINDOWS 運用 PC ② AZURE VM · 本番サーバー タスクスケジューラ → executor.ps1 先に Excel マクロで正社員ホワイトリストを出力 find_users_emails_and_departments Microsoft SSO ログインを自動化 組織ツリーを展開し部/課のメールを取得 → new_users / new_organization.csv generate_all_users_data メールアドレスごとに検索:所属 · 役職 · 氏名 → all_users_data.csv transport_csv paramiko で日時ディレクトリへ SFTP 送信 remove_old_dir 期限切れの CSV とログを削除 各ステップは独立したサブプロセス · 失敗したら後続を中止 社内人員名簿 社内人員名簿 (旧システム は廃止) 組織ツリー 社員検索 SFTP cron → executor.sh 当日の最新データディレクトリを検索 SFTP 受信ディレクトリ 専用アカウント · batchgroup 権限 manage_user_batch(11 ステップ) 1 csv_validator:ヘッダ · メール形式 · 危険文字 2 組織差分 → update_organization.sql 組織の想定外の変更 → 終了コード 2 → 中断して通知 3 人員差分 → update_users.sql 新規メンバー有効化 · 離脱者停止 · 再入社でロック解除 4 権限グループ差分 → curl スクリプト 状況報告グループ · 部門内の長のグループ · ホワイトリストグループは保持 5 SQL / スクリプト実行 → 旧ディレクトリを削除 2 段階実行 EXEC_UPDATE_USER_SQL_FLAG で直接書き込むかを制御 組織変更時はまず SQL を生成し、担当者の確認後に executor_after_confirmed.sh を実行 MySQL(Redmine DB) users · email_addresses 部門 / 部 / 課 · 役職 · config Redmine REST API グループメンバーの追加・削除 SendGrid 異常通知メール 3 種 システム担当者 SQL を確認後に手動で解放
会社ページで他の構成図 1 点を見る →

担当業務

  • データ元の移行:旧人員名簿の廃止に伴い、クローラを新サイトへ移行。新しい画面構成と Microsoft SSO ログインに対応し、従来の役職表記との互換性を維持して下流の連携ロジックは無改修
  • Selenium(Edge Headless)で自動ログインして組織ツリーを巡回し、社員検索で所属・役職を取得。paramiko の SFTP で社内 PC から Azure サーバへ一方向に連携
  • 連携バッチ:新旧データの差分から SQL を自動生成・実行し、アカウントの追加・停止・再入社時のロック解除、部・課・役職を同期。Redmine REST API で状況報告系の権限グループを更新(ホワイトリスト対応)
  • SendGrid で 3 種類の異常通知メールを実装。想定外の組織変更を検知した場合は処理を中断し、担当者の SQL 確認後に実行する 2 段階方式で本番データを保護
  • コード内に分散していた部署マッピングを DB の設定テーブルへ集約。4 月の組織変更に向け、画面・申請フロー・権限グループを網羅するテストケースを設計・実施
  • 本番障害の調査・修正:重複データによるロック誤判定、再入社ユーザの欠落、ネットワーク遅延によるタイムアウト、Edge ドライバ不一致
  • 社内運用 PC と Azure VM の 2 環境へ本番リリース(バックアップ → デプロイ → SQL 実行を止めた試験運転 → 本稼働)。運用手順書(デプロイ・通知メール説明・障害対応・組織変更 SOP)を作成して引継ぎ
  • Fortify / FOSSology によるセキュリティ・ライセンススキャンを実施し、JSON インジェクション、SQL インジェクション等の指摘を修正。OSS ライセンス一覧を整備

データフロー

社内人員名簿 → Selenium クローラ(社内 PC)→ CSV → SFTP → 差分 SQL / Redmine REST API(Azure VM)→ アカウント・部課組織・権限グループ

作業範囲: 製造 / 単体試験 / 結合試験 / 運用保守
  • Python
  • Selenium
  • paramiko
  • MySQL / MariaDB
  • Redmine REST API
  • SendGrid
  • Bash
  • PowerShell
  • Azure VM
所属:株式会社◯◯(SES) 会社ページへ
日本 2025.10 – 2025.12(3ヶ月)

ANTLR4 + RAG + MCP による COBOL 機能説明書の自動生成

AI(レガシー資産の可視化・文書化) ・ 方式設計・実装・検証(個人主導)

詳細を見る
  • Python
  • ANTLR4
  • ChromaDB
  • SentenceTransformers
  • MCP (FastMCP)
  • Gemma-3 4B
  • +3

お客様の中核バッチは数十年前に書かれた COBOL プログラムで稼働しており、設計書が無く、TR1-HINSHU のような略称変数の業務上の意味はデータベース設計書や用語集に散らばり、COBOL に詳しい人材も減っている。COBOL ソースを入力すると、業務担当者にも読める日本語の機能説明書(Markdown)を自動出力することが目標。確定的な処理(構文・レイアウト・呼び出し関係)はプログラムに任せ、モデルは「意味を与えて文章にする」ことだけを担当させる設計とした。

システム構成

知識ベース + MCP + 説明書生成パイプライン
① オフライン · 知識ベース構築(一度だけ) 資料 DB 設計書 · 用語集 表/ファイル/ジョブフロー定義 意味単位に分割 ファイル→レコード→項目→集団 {key, value} に統一 key(項目 ID)のみ埋め込み 埋め込み multilingual-e5-small 日・中・英で検索 ChromaDB エイリアス:OCCURS 添字を除去 階層パスを保持 MCP サーバー(FastMCP) lookup_field · lookup_record batch_lookup_fields · get_subroutine_summary ベクトル検索をツール化 ② オンライン · 説明書生成(プログラムごとに 1 回) COBOL ソース Unisys 系方言 前処理 Shift_JIS → UTF-8 行番号除去 · 方言指令 ANTLR4 構文解析 Cobol85.g4 → AST 呼出グラフ+整列 PERFORM · EXT 除外 下位から上位へ Gemma-3 4B サブルーチンごとに生成 機能説明書 .md(日本語) 必要な変数定義だけ検索 確定的な処理はプログラムへ(構文・レイアウト・呼び出し関係)、モデルは「意味を与えて文章にする」だけ

担当業務

  • モデル能力の検証と方針転換:Gemma-3 4B の COBOL 理解力をベンチマーク。Colab で LoRA 微調整を試みたがメモリ制約で完了せず。業務辞書が顧客ごとに変わるため、再学習が不要な RAG へ転換
  • 知識ベース構築:データベース設計書・用語集・表/ファイル/ジョブフロー定義を {key, value} に統一し、「ファイル → レコード → 項目 → 集団項目」の階層で意味単位に分割。key のみを multilingual-e5-small で埋め込み ChromaDB に格納し、検索前に OCCURS の添字を除去してエイリアスと階層パスを整備
  • COBOL 構文解析:Cobol85.g4 から Python 用 Lexer / Parser / Visitor を生成。Shift_JIS→UTF-8 変換、行番号除去、$SET 等の方言指令を前処理で処理。解析木を LLM 向けの簡略 AST に変換し、REDEFINES / OCCURS / COMP / 88 レベルに対応した変数抽出器を実装
  • 呼び出し階層の解析:PERFORM から呼び出しグラフを構築し、RTN / EXT ペアのうち出口だけの EXT 段落を除外。トポロジカルソートで下位から上位への解析順序を決定
  • MCP 連携:FastMCP でベクトル検索を lookup_field / lookup_record / batch_lookup_fields / get_subroutine_summary の 4 ツールとして公開。数百の変数定義をすべてコンテキストに詰め込まず、モデルが使用中の変数だけを検索
  • 生成とプロンプト調整:サブルーチンごとに入力・出力・作業変数と呼び出し先を抽出し、MCP で定義を検索、下位の要約を渡して Gemma-3 が Markdown を生成。プロンプトの制約で空項目を省略させ、MOVE の直訳ではなく業務の言葉で説明させる

成果

  • ✓ 2 本のプログラム(13.7 KiB / 13.5 KiB)からそれぞれ約 6.5 KiB / 6.7 KiB の説明書を生成し、検索された用語は期待どおりであることを確認
  • ✓ 「静的解析+RAG+ツール呼び出し」の分担構成を確立。サブルーチン単位に分割して下位から解析することで、4B の小型モデルでもコンテキストを超える長いプログラムを扱え、変数説明が正しい業務名称に対応

データフロー

知識ベース(設計書 → 意味単位に分割 → 埋め込み → ChromaDB)⇄ MCP ⇄ COBOL ソース → 前処理 → ANTLR4 → AST → PERFORM 呼び出しグラフ → トポロジカルソート → Gemma-3 がサブルーチンごとに生成 → 機能説明書 .md

作業範囲: 外部設計 / 機能設計 / 内部設計 / 製造 / 単体試験
  • Python
  • ANTLR4
  • ChromaDB
  • SentenceTransformers
  • MCP (FastMCP)
  • Gemma-3 4B
  • Hugging Face Transformers
  • Google Colab
  • WSL
所属:株式会社◯◯(SES) 会社ページへ
中国 2023.07 – 2024.07(1年)

戦場並行シミュレーションシステム

シミュレーション・推演(研究機関向け) ・ バックエンド開発(Go / Python)

詳細を見る
  • Go
  • Gin
  • MongoDB
  • MySQL
  • Redis
  • NSQ
  • +5

同社の中核製品で、研究機関向けの B/S 構成の戦場シミュレーションプラットフォーム。ユーザーは 3D デジタル地球上で作戦想定を編成し、ワンクリックでシミュレーションエンジンへ送って推演。態勢をリアルタイムに 3D 表示し、多人数での共同編集、録画再生、効果評価を行う。

システム構成

システム全体構成
L1 ブラウザ 想定編集 Vue 2 + Cesium の 3D デジタル地球 多人数の共同編集 推演制御 開始 / 一時停止 / 再開 倍速 · タイムライン 態勢表示 3D 表示 · 録画再生 効果評価 L2 業務サービス(Go) 業務メインサービス(Gin) 17 モジュール · 約 100 API router / controller / service / model WebSocket Hub タスク単位のルーム 読み書き 2 コルーチン + ハートビート オペレータサービス 想定 JSON → エンジン XML(3,000 行超) GeoJSON 空間演算 · 態勢録画 L3 推演制御 エンジンのライフサイクル管理 ポート動的割当 · os/exec で起動 goroutine で終了監視・回収 エンジンコンソール(Go) TCP でスケジューラ接続 · コマンド中継 開始・停止・一時停止・再開の HTTP API レーダー信号サービス Tornado + SciPy · Docker チャープパルス · クラッタ · エコー L4 エンジンと保存 シミュレーションエンジン(外部) 推演 · 態勢をリアルタイム返送 保存とメッセージ MongoDB · MySQL · Redis · NSQ

担当業務

  • 業務メインサービス(Gin + MongoDB)の設計・開発を担当。router / controller / service / model の階層構成で、型式・エンティティ・装備・データ辞書・テンプレート・想定バージョンなど 17 モジュール・約 100 本の API を実装
  • 推演エンジンのライフサイクル管理を設計:ポートの動的割り当て、想定のエンジン入力へのエクスポート、os/exec によるプロセス起動と登録、goroutine での終了監視と資源の自動回収により、複数推演の並行実行に対応
  • WebSocket Hub でタスク単位のルームによる想定の多人数共同編集を実装:読み書き 2 つのコルーチン+ハートビート、想定ツリーをフラット化したインデックスキャッシュ、差分コマンドのリアルタイム配信
  • オペレータサービスの開発:想定 JSON → 外部シミュレーションエンジン XML 変換(3,000 行超)、GeoJSON による領域・交差・和集合の空間演算。態勢のフレーム単位録画と、一時停止・倍速・タイムライン再生を実装
  • Go でエンジンコンソールを開発し、TCP でスケジューラと接続してエンジンコマンドを中継。推演の開始/停止/一時停止/再開の HTTP API を提供
  • Tornado + SciPy でレーダー信号生成サービス(線形 FM パルス、クラッタ、エコー)を開発。バックグラウンドスレッドで非同期生成し Docker で配備

データフロー

想定編集(Vue + Cesium)⇄ WebSocket 共同編集 → Gin メインサービス → オペレータサービス(JSON → XML)→ エンジンコンソール(TCP)→ シミュレーションエンジン → 態勢返送 → 3D 表示/録画再生

作業範囲: 機能設計 / 内部設計 / 製造 / 単体試験 / 結合試験
  • Go
  • Gin
  • MongoDB
  • MySQL
  • Redis
  • NSQ
  • WebSocket
  • Python
  • Tornado
  • SciPy
  • Docker
所属:広州辰創科技 会社ページへ
中国 2023.07 – 2024.07(8ヶ月)

知能ゲーム対抗推演

知能ゲーム対抗推演(無人化の空海対抗シナリオ) ・ Python 開発 · エージェントとプラットフォームの連携

詳細を見る
  • Python
  • ZeroMQ
  • Protobuf
  • MQTT
  • PyQt5
  • NumPy

無人化の空海対抗シナリオ(島嶼防衛 vs 空母打撃群の侵攻)におけるエージェント指揮決定プロジェクト。C++ のゲーム推演プラットフォームが裁定を担い、Python 側でプラットフォーム連携、赤・青双方のエージェント、対抗過程のリアルタイム監視を実装した。

システム構成

連携層とエージェントの構成
L1 ゲーム推演基盤(C++) ゲーム推演プラットフォーム シミュレーション裁定 · 損害判定 L2 連携層(Python) ZeroMQ(REQ + DEALER) 要求/応答チャネル Protobuf 電文 推演データのシリアライズ 38 本のラップ API 推演制御 · ユニット/任務/損害照会 航路 · 発艦 · 編成 L3 推演メインループ Runner 固定ステップ:観測 → 判断 → 指令 勝敗の採点 ラウンドごとに集計 L4 エージェント 赤軍防御エージェント 知覚 → 情報融合 火力配分 → 攻撃検証 青軍侵攻エージェント 複数の行動案 無人機部隊 · 飽和攻撃 参加エージェントの評価 16 体を配備 · 依存関係の切り分け 代表的な戦略を分解 L5 監視 MQTT 配信 エージェントの態勢 PyQt5 リアルタイム監視 タブ:赤・青のユニットと損害 オフライン保存と振り返り ラウンドごとに保存

担当業務

  • ZeroMQ(REQ + DEALER)と Protobuf でプラットフォーム連携層を実装。推演制御、ユニット/任務/損害の照会、航路、発艦、編成など 38 本の API をラップし、Runner が固定ステップで「観測 → 判断 → 指令」を回して勝敗を採点
  • 赤軍の防御エージェントを開発:知覚 — 情報融合 — ミサイル/火砲/レーザーの火力配分 — 攻撃検証という段階的な意思決定。青軍の侵攻エージェントも開発:複数の行動案、無人機部隊の発進と飽和攻撃
  • 参加 16 エージェント(ルール/機械学習/深層学習)の配備・評価を担当。依存関係や実行上の問題を切り分け、代表的な戦略を分解して技術共有を実施
  • エージェントの態勢を MQTT で配信し、PyQt5 でリアルタイム監視ツールを開発。タブごとに赤・青のユニットと損害を表示し、ラウンド単位でのオフライン保存と振り返りに対応

データフロー

C++ 推演プラットフォーム ⇄ ZeroMQ + Protobuf ⇄ Runner(観測 → 判断 → 指令)→ 赤/青エージェント → MQTT → PyQt5 リアルタイム監視

作業範囲: 機能設計 / 内部設計 / 製造 / 単体試験 / 結合試験
  • Python
  • ZeroMQ
  • Protobuf
  • MQTT
  • PyQt5
  • NumPy
所属:広州辰創科技 会社ページへ
中国 2022.08 – 2023.07

産業制御セキュリティ監査プラットフォーム

産業制御セキュリティ(電力・製造) ・ Python バックエンド開発 ・ 体制 13名

詳細を見る
  • Python
  • Django / DRF
  • Celery
  • Kafka
  • Redis
  • PostgreSQL
  • +4

電力・製造などの制御システム向けのバイパス型トラフィック監査システム。プローブがスイッチのミラートラフィックを取得し、Kafka を経由して Cython 製のプロトコル解析エンジンへ。資産・ホワイトリスト・ブラックリストの 3 層ポリシーで検知・通知する。Modbus、S7COMM、IEC104、IEC61850、DNP3、OPC UA/DA/AE、PROFINET、ENIP/CIP、BACnet など 27 種の産業プロトコルを詳細解析し、電力系研究機関などの案件で稼働。

システム構成

全体構成とデータフロー
キャプチャ · プローブ メッセージバス 解析 · 検知 保存 · 同期 アプリ · 管理 オフライン警告 HTTP REST ルール · 資産 · プロトコルスイッチ · しきい値 5 秒ごとに取得(ホット更新) 制御ネットワークのミラートラフィックSPAN ポート · 読み取り専用 network-capturer キャプチャプローブ · Python Scapy L2 raw ソケット selector で複数 NIC をポーリング Cython Cstat カウント deque バッファ → Producer 運用の備え Supervisor で常駐プロセスを監視 Celery が 5 分ごとにプローブを巡回 取得 / Kafka 書込を二重計数 systemd で Pilosa の状態を確認 cpulimit でプロセスの CPU を制限 Suricata 4.0.4 AF_PACKET · cluster_flow 産業系脆弱性シグネチャ 996 件 unified2 バイナリログを出力 Kafka クラスタ cp-kafka 5.4 · ZooKeeper SASL 認証 · Docker 配備 retention.ms = -1 raw_packets 生フレーム · 300GB 保持 alerts 検知アラート · 1GB 保持 Kafka の設計ポイント キャプチャと解析を分離しピークを吸収 解析側を再起動してもデータを失わない Producer retries = 5 100 件ずつバッチ送信 BufferError → flush して再試行 raw 300GB / その他 1GB unified2 ログ /var/log/suricata packet-inspector 解析・検知エンジン · Consumer が raw_packets を取得 · pypkt (Cython) で 70 超のプロトコルを解析 · 5 タプル+MAC+プロトコル+ペイロード → ハッシュ · Redis 10 秒の期限窓でカウント集約 · 5 秒ごとに一括 INSERT … RETURNING · WhitelistInspector でポリシー検知 · 異常 → Producer が alerts へ書き込み · ThreadPool(16) + fail2restart で自己復旧 内部スレッド図は第 2 節 store.py アラート登録 alerts を消費 → sec_alert テーブル Syslog 外部送信 · 演習環境へ送信 Supervisor 常駐プロセス gunicorn · celery worker/beat store.py · unified2_recorder db_2_pilosa · packet_stat detect_device_offline cpulimit unified2_recorder idstools で解析 → ブラックリストアラートを登録 Redis 6 DB0/1 Celery ブローカー/結果 DB2 フロー集約窓 TTL 10 秒 DB3 機器アクティブ TTL N 分 keyspace 期限切れイベント (Ex) PostgreSQL 10 packet_packet フロー記録(count / length 含む) sec_alert_secalert セキュリティアラート 資産 · 許可 · 拒否リスト · 設定 wal_level = logical max_connections = 300 Kafka Connect · Debezium pgoutput 論理レプリケーション → Avro auditor.public.* CDC 変更 · Schema Registry db_2_pilosa AvroConsumer → ビットマップ Pilosa ビットマップインデックス 統計 · 許可リスト自動学習 Vue 2 フロントエンド Vuex · Router · ECharts iView · axios · Electron Django 1.11 + DRF Gunicorn 8 workers :9003 資産 · ホワイトリスト · ブラックリスト セキュリティ · システム警告 パケット監査 · レポート出力 ポリシー退避復元 · 設定 ユーザー · ライセンス有効化 ホワイトリスト自動学習 統合管理プラットフォーム連携 drf-yasg API ドキュメント Django アプリ約 12 個 Celery worker + beat Redis をブローカーに レポート · ポリシーバックアップ · 統計 期限切れデータの削除 · プロセス巡回 bigdaddy 機器エージェント IP / 時刻の変更 / 再起動 キャプチャ NIC の設定 · ルール配信 ファームウェア更新 RSA + AES 証明書生成 · ライセンス有効化 外部連携 統合管理基盤 · 国家暗号 SM4 Syslog · 演習環境への送信 1 2 3 4 5 6 7 8 9 10
会社ページで他の構成図 2 点を見る →

担当業務

  • トラフィック処理経路の開発に参画:キャプチャプローブ → Kafka → プロトコル解析エンジン → PostgreSQL。Redis の有効期限イベントで 10 秒窓のフロー集約と一括登録を実現し、DB 書き込み負荷を大幅に低減。Redis の TTL で機器のオフライン検知を実装
  • 5 タプル・MAC・プロトコルのファンクションコードに基づくホワイトリスト検知エンジンを実装し、ビットマップで「通信行動の異常」と「内容の異常」を区別。IEC104 ASDU や OPC のインターフェース/ファンクションコードまで踏み込んだルール照合、時間帯指定でのホワイトリスト自動学習にも対応
  • 資産管理、ホワイト/ブラックリストポリシー、アラート、レポートなどの Django REST API を担当。Celery Beat でレポート出力、ポリシーバックアップ、期限切れデータの削除、プローブのヘルスチェックなどの定期ジョブを実装
  • Suricata を組み込み、unified2 アラートを解析。約 1,000 件(996 件)の産業系脆弱性シグネチャでブラックリスト検知を実現
  • Kafka Connect(Debezium CDC)で Pilosa のビットマップインデックスへデータ同期し、トラフィック統計と多次元検索を支援
  • (カスタム版)IEC 61850 の SCD ファイルを解析し、変電所の IED 通信ベースラインとトポロジを自動生成

成果

  • ✓ プロトコル解析は CPU 負荷の高いバイト単位の処理。解析ライブラリは Cython で記述してホットパスを C 拡張にコンパイルし、C に近い性能と上位への Python インターフェースを両立。納品は .so のみで、コアコードの保護にもなる

データフロー

スイッチのミラーポート → プローブ(Scapy)→ Kafka raw_packets → Cython 製プロトコル解析エンジン → Redis 10 秒フロー集約 → PostgreSQL → ホワイトリスト検知 → alerts → Django + Vue。Suricata がブラックリスト検知を並行実行。PostgreSQL →(Debezium CDC)→ Pilosa

作業範囲: 機能設計 / 内部設計 / 製造 / 単体試験 / 結合試験
  • Python
  • Django / DRF
  • Celery
  • Kafka
  • Redis
  • PostgreSQL
  • Pilosa
  • Suricata
  • Cython
  • Vue 2
所属:浙江木鏈科技 会社ページへ
中国 2020.08 – 2022.08(2年)

AI コンテンツ安全アルゴリズム中台

AI × コンテンツ安全 ・ 中台・アルゴリズムバックエンド(Python / C++11) ・ 体制 15名

詳細を見る
  • Python
  • C++11
  • Ray
  • Kafka
  • Protobuf
  • gRPC
  • +12

大手のコンテンツ安全審査製品を目標とした AI システムで、公開ネット上のメディアを監視・解析し、政府系ユーザーや協業各社に審査機能を提供する。サブスクリプション方式で 10 種類以上のアルゴリズム機能(画像・動画・音声・テキスト)を提供。自分は Ray ベースの調整中台と SWIG による言語間ラッパーを担当し、昇腾 Atlas ACL 推論 SDK とデュアルプラットフォームのモデルツールチェーンにも参画した。

システム構成

5 層テクノロジースタック
L5 提供層 製品の提供 オンライン審査 SaaS · Kafka 返却 CDF クロスモーダル検索(オフラインイメージ) 標準公開 API · 署名/コールバック L4 調整層 Ray アルゴリズム調整中台 Kafka 消費 Actor ×N MsgWorker 電文層 InferWorker ルーティング層 モデル Actor プール ×8 L3 ブリッジ層 SWIG クロス言語ラッパー .i インターフェース定義 _wrap.cxx → .so numpy ポインタのゼロコピー pyporn / pyivcpd … L2 推論層 C++ 推論 SDK acl_manager decoder · FFmpeg + DVPP inference / 前後処理 検索インデックス L1 ハードウェア層 異種演算資源 NVIDIA T4 · CUDA · TensorRT 7 INT8 華為 Ascend Atlas · ACL · DVPP 横断 ツールチェーン データ・モデルのツールチェーン クローラ収集 フレーム切り出し/ラベル解析 pth → ONNX ロバスト性評価
会社ページで他の構成図 4 点を見る →

担当業務

  • Ray ベースの分散アルゴリズム調整中台を構築(主担当):Actor モデルで 10 種類以上のアルゴリズム機能(アダルト・暴力テロ識別、OCR、局ロゴ、ロゴ、顔検索、動画コピー検出、クロスモーダル検索など)を統合的に編成
  • メッセージ信頼性:Kafka の自動コミットを無効化し、1 バッチ処理後に commit(at-least-once)。puller Actor の数はクライアントが検出したパーティション数に合わせ、1:1 で起動
  • GPU リソースの分割:num_gpus=0.2 の小数指定により、1 枚の GPU で 5 つのモデルインスタンスを並行稼働(クラスタは 1 台・Tesla T4 × 4)
  • 「電文層 — ルーティング層 — モデル層」の 3 層抽象を設計:電文層は ray.wait で推論バッチを流れるように再構成し、ルーティング層は購読 algo_id とモデル能力の積集合で動的に振り分け。新しいモデルは Actor を 1 つ足すだけで既存コードに触れない
  • SWIG 4.0 で C++ アルゴリズムライブラリを Python 拡張モジュール化(主担当):画像は numpy のメモリポインタで渡し C_CONTIGUOUS を検証して、言語間のデータコピーを排除
  • 華為 Ascend Atlas ACL 推論 SDK(C++11 / CMake)の開発に参画:デバイス/Stream 管理、FFmpeg のデマルチプレクスと DVPP ハードウェアデコード。ベクトル検索を AscendFaiss から Milvus へ移行し、CANN ドライバ 3 バージョンに対応。複数チップ並列検索時の OpenMP スレッド数不一致によるインデックス削除失敗を特定・修正
  • モデルのデュアルプラットフォーム展開:PyTorch → ONNX(opset 11)→ TensorRT 7 INT8(Tesla T4 向け)/Ascend ATC の .om オフラインモデル。同一の業務コードで NVIDIA と Ascend の両方を支え、累計 17 のモデルパッケージを保守
  • 自社開発の OCR 機微コンテンツ識別:PSENet によるテキスト検出 + CRNN(LSTM) 認識 + 角度分類。認識結果は DFA アルゴリズムで約 2 万語の辞書と高速に照合

成果

  • ✓ 10 種類以上のアルゴリズム機能を同一の調整中台で提供。GPU 版と Ascend 版の SDK アーカイブで合計 17 のモデルパッケージ
  • ✓ ベクトル検索の基盤を Milvus に統一し、GPU 系と Ascend 系で検索インターフェースを共通化

データフロー

Kafka タスク → Puller ×N(パーティションと 1:1)→ 電文層 → ルーティング層(algo_id ∩ モデル能力)→ モデル Actor プール(1 枚あたり ×5)→ 結果 Kafka。C++ SDK は SWIG 経由で接続、ベースデータ → Milvus + MySQL

作業範囲: 機能設計 / 内部設計 / 製造 / 単体試験 / 結合試験 / 運用保守
  • Python
  • C++11
  • Ray
  • Kafka
  • Protobuf
  • gRPC
  • SWIG
  • CMake
  • PyTorch
  • ONNX
  • TensorRT
  • 昇腾 ACL
  • Milvus
  • Redis
  • MySQL
  • MongoDB
  • Docker
  • FFmpeg
所属:人民中科 会社ページへ
中国 2020.08 – 2022.08

クロスモーダル検索オフライン製品(顧客向けカスタマイズ)

AI × コンテンツ安全(顧客向けオフライン納品) ・ 単独開発

詳細を見る
  • Python
  • Tornado
  • gRPC
  • Milvus
  • Redis
  • NumPy
  • +2

顧客のカスタマイズ要件に応えるオフライン納品物。開発者向けの多パラメータなモデル API を単純な検索 API にラップし、Docker イメージで納品。モデルパス・特徴次元・インデックス分割などの内部パラメータはすべて隠し、検索 API を 1 つだけ公開する。

システム構成

クロスモーダル検索のフローと性能改善
検索のメインフロー 3 モダリティ入力 テキスト/画像/動画 base64 または平文 フレーム抽出/デコード cv2 で 25 フレームごとに 1 枚 動画のみ クロスモーダル・デュアルタワー text.en / image.en 512 次元に統一した特徴 動画特徴の合成 フレーム特徴の平均 np.average Milvus gRPC 検索 TopK 候補 複数条件ロジックエンジン AND/OR/NOT/包含 結果の集合演算 RRF 再ランク 逆順位融合 1/(rank_l + rank_r) ラベル一括付与 QueryTags バッチ処理 TopK ラベル語 Redis キャッシュ → JSON 動画情報/ラベルの 2 次キャッシュ Tornado 非同期レスポンス 性能改善 4 段階 · 版の変遷は API/readme に記録 v1 · old gRPC 単発照会 ベースライン実装 v2 gRPC 並行 API バッチリクエストの統合 v3 · new 論理条件の前置絞り込み 絞り込み後にラベル付与 v4 · thread マルチスレッド分割照会 100 件/バッチ + np.dot 類似度

担当業務

  • Tornado サービスがテキスト/画像/動画の 3 モダリティ入力に対応:動画は 25 フレームごとに 1 枚抽出し、クロスモーダルのデュアルタワーモデルで 512 次元の特徴に統一、動画特徴はフレーム平均
  • gRPC で Milvus を検索して TopK 候補を取得し、複数条件ロジックエンジン(AND/OR/NOT/包含)で集合演算、RRF(逆順位融合)で再ランク、ラベル一括付与、Redis で 2 次キャッシュ
  • 性能改善 4 段階:gRPC 単発照会 → 並行バッチ API → 論理条件の前置絞り込み → マルチスレッド分割照会(100 件/バッチ)+ np.dot によるバッチ行列内積。ベース照会を N 回の逐次 gRPC から ⌈N/100⌉ 回の並行バッチへ集約
  • 同種のオフライン製品として、動画の特定物体フィルタも担当:フレーム抽出 → SDK で 512 次元特徴 → gRPC で Milvus 検索 → 後処理 → Docker 納品

成果

  • ✓ 顧客向けカスタマイズのオフライン版を累計 3 件納品(Docker イメージ)
  • ✓ 類似度計算を 1 件ずつの比較から単一の行列内積に変更し、しきい値による早期打ち切りを併用

データフロー

3 モダリティ入力(テキスト/画像/動画)→ フレーム抽出 → クロスモーダル符号化(512 次元)→ gRPC · Milvus → ロジックエンジン → RRF 再ランク → ラベル付与 → Redis キャッシュ → JSON

作業範囲: 機能設計 / 内部設計 / 製造 / 単体試験 / 結合試験
  • Python
  • Tornado
  • gRPC
  • Milvus
  • Redis
  • NumPy
  • OpenCV
  • Docker
所属:人民中科 会社ページへ
中国 2020.08 – 2022.08

CV データ処理システム

AI × コンテンツ安全(データ基盤) ・ SE ・ 体制 1名

詳細を見る
  • Python
  • Tornado
  • Vue
  • Vue-Element-Admin
  • MongoDB
  • OpenCV
  • +1

ディープラーニングに必要なデータ処理業務を可視化・効率化することを目的とし、部門メンバーが GUI 操作でデータ収集・加工を行えるように開発。バラバラに存在していた個人スクリプトをシステム化・統合し、再利用性と作業効率を向上させた。

システム構成

CV データ処理システムのモジュールとデータフロー
L1 画面 Vue 管理画面 個人スクリプトを 1 つの画面に集約 L2 API Tornado API 層 RESTful API · タスク指示 L3 3 つのモジュール データ収集 RESTful でクローラ API と連携 画面から収集タスクを指示 データ処理 OpenCV 画像 · FFmpeg 動画スクリプト ファイルアップロードの再開対応 モデル欠陥分析 初期ラベル + 人手確認(GUI) データセットとモデルパスを指定 L4 成果物 MongoDB 収集結果 処理済みの画像/動画 切り抜き · 変換など PR 指標 + PDF レポート バックエンドで自動生成

担当業務

  • データ収集モジュール:RESTful API でクローラサービスを連携し、画面から収集タスクを実行、結果を MongoDB に保存
  • データ処理モジュール:OpenCV の画像処理・FFmpeg の動画処理を Tornado で API 化し、Vue 画面から操作可能に。ファイルの分割アップロード(レジューム対応)を設計
  • モデル欠陥分析モジュール:初期ラベリングと人手確認を GUI 化。複数データセット・モデルを入力して PR 指標を算出し、PDF レポートを自動生成
  • フロント・バック両方を担当し、ページコード修正や UI 改善も実施
作業範囲: 要件定義 / 外部設計 / 機能設計 / 内部設計 / 製造 / 単体試験 / 結合試験
  • Python
  • Tornado
  • Vue
  • Vue-Element-Admin
  • MongoDB
  • OpenCV
  • FFmpeg
所属:人民中科 会社ページへ
中国 2019 – 2020

AI 授業行動分析システム

AI × 教育 ・ フルスタックエンジニア(アルゴリズム・バックエンド・社内学習基盤) ・ 体制 5名

詳細を見る
  • Python
  • Tornado
  • PyTorch
  • maskrcnn-benchmark
  • face_recognition (dlib)
  • OpenCV
  • +6

教室のカメラで生徒の授業中の行動(前を向く、うつむく、挙手、机に伏せる、横を向くなど)を認識し、顔認識で個々の生徒に対応付けて、リアルタイム警告と多階層の授業レポートを提供する。自分は 2 つのサブシステム、学校向けのリアルタイム分析・警告プラットフォームと、社内用のデータ注釈・モデル学習プラットフォームを開発した。

システム構成

リアルタイム分析・警告プラットフォームの全体構成
収集層 ストリーミング & 推論層 データ層 サービス層 クライアント 教室カメラ RTSP 映像ストリーム デモ用映像ストリーム infinitevideo.sh FFmpeg でループ配信 ライブ経路(ClassDetailHandler が授業詳細を開いたときに起動) FFmpeg RTSP→RTMP 転送 nginx-rtmp rtmp://…/mytv/ H5 プレイヤー ckplayer/video.js 分析プロセスの起動 / 停止(nohup + kill、先に空きメモリを確認) GPU 推論プロセス · クラスごとに 1 つ · front_back_frame ①OpenCV で読み込み + フレーム間引き制御 映像タイムスタンプが実時間より遅れたらフレームを飛ばしてリアルタイム性を確保 ②Mask R-CNN(R-101-FPN)で生徒を検出 「人」のみ残す · 信頼度 ≥ 0.7 · 重なり枠の除去(0.8) ③ResNet18 行動分類(6 クラス) 1 人分の画像を正方形に補完 → 224×224 · 信頼度 < 0.95 は「不確定」 ④face_recognition で生徒を識別 CNN で顔位置 → 128 次元特徴 → クラスの顔 DB と照合 ⑤フレーム間追跡 + トラック内の本人投票 5 秒窓の双方向重なり率で対応付け · トラック内で最頻の生徒 ID を採用 机に伏せる / 横を向く → 顔画像を切り出し base64 で警告に格納 書き込み MongoDB realtimewarning クラスごとの最新フレーム結果 record_pics フレームごとの履歴 pg_classes クラス・映像・顔 DB school/class/student 学校 · クラス · 生徒の台帳 students_performances 授業ごとの行動パフォーマンス bf_kaoqin … 顧客の勤怠などのカスタムデータ Tornado Web :8080 · pymongo アカウント管理 セキュア Cookie · 3 種のロール 警告システム /getfaster をポーリング レポート表示 生徒/授業/学年/学校 顧客向けカスタム画面 顧客 A · 顧客 B ミニプログラム API xcx.py 外部向け公開 API jyd_api.py Amaze UI · ECharts 校長 / 教師 ブラウザ ミニアプリ 保護者 / 教師 外部連携先 外部システム 運用と納品 supervisor が 4 プロセスを常駐化(Web · 分析 · 配信 · VPN) | Cython でコアアルゴリズムを .so 化 | ドングルでライセンス管理 | Linux + NVIDIA GPU(CUDA)
会社ページで他の構成図 2 点を見る →

担当業務

  • 2 段階認識:Mask R-CNN(R-101-FPN)で生徒を検出 → ResNet18 で行動分類(6 クラス、信頼度 0.95 未満は「不確定」)。検出モデルに直接分類させるより精度が高く、行動クラスの変更時も小さな分類器だけ再学習すればよい
  • リアルタイム分析:OpenCV で RTSP ストリームを読み、映像タイムスタンプが実時間より遅れたらフレームを間引いてリアルタイム性を確保。クラスごとに独立した GPU プロセスを起動し、起動前に nvidia-smi で空きメモリを確認
  • フレーム間追跡と本人識別:5 秒窓の双方向重なり率による追跡を自作。face_recognition(dlib)の 128 次元特徴をクラスの顔データベースと照合し、同一トラック内で最頻の生徒 ID を採用して、うつむき・横顔でも本人を識別
  • 机に伏せる・横を向くのリアルタイム警告:生徒の顔画像(base64)を切り出して警告に格納。最新結果とフレームごとの履歴は MongoDB に分けて保存
  • Tornado バックエンド:アカウントと 3 種のロール、警告・レポート(生徒・授業・学年・学校の 4 階層)、WeChat ミニプログラム API と外部プラットフォーム向け公開 API。プロダクトマネージャーのプロトタイプに合わせて API の項目仕様を設計
  • scikit-learn で行動データを分析し、生徒ごとの週報・月報・学期レポートを作成して保護者の WeChat ミニプログラムへ配信
  • 社内のデータ注釈・学習プラットフォーム:動画の切り出し → Mask R-CNN による事前注釈(labelme JSON 生成)→ 人手修正 → 切り抜き → データセット作成 → ResNet18 学習(再開対応、loss/精度の曲線)→ 検証。授業全体のオフライン分析がリアルタイム版の原型
  • 納品:コアの追跡アルゴリズムを Cython で .so にコンパイルし、supervisor による常駐化とドングルによるライセンス管理で、複数顧客へオンプレミス展開

成果

  • ✓ 同一コードで 3 顧客向けのカスタム API、外部向けの公開 API、WeChat ミニプログラムを同時に提供
  • ✓ データ生産を Web ツール化し、モデルによる事前注釈で手作業を削減。アルゴリズム担当以外も注釈に参加可能に

データフロー

カメラ RTSP → OpenCV 読み込み/フレーム間引き → Mask R-CNN 検出 → ResNet18 行動分類 → 顔認識 + 追跡/投票 → MongoDB → Tornado 画面/リアルタイム警告/WeChat ミニプログラム

作業範囲: 外部設計 / 機能設計 / 内部設計 / 製造 / 単体試験 / 結合試験
  • Python
  • Tornado
  • PyTorch
  • maskrcnn-benchmark
  • face_recognition (dlib)
  • OpenCV
  • FFmpeg
  • MongoDB
  • scikit-learn
  • Cython
  • ECharts
  • jQuery
所属:北京雲上作科技 会社ページへ
中国 2020

AI 診断型オンライン授業モニタリングシステム

AI × 教育(オンライン授業) ・ 統計エンジンのバックエンド、管理画面のフロントエンド、アルゴリズム分析に参画

詳細を見る
  • Python
  • Tornado
  • Elasticsearch
  • Redis
  • Vue 2
  • Element UI
  • +4

オンライン英会話の授業(コロナ禍で授業がオンラインに切り替わったため)で教師・生徒の音声と映像をリアルタイムに収集し、ASR / CV / VAD で構造化。レッドライン行動(中国語での発話、教師の話しすぎ、生徒の参加不足、画面からの離脱、黒画面・切断)を準リアルタイムで警告し、教育品質指標のレポートを本部/支社/校舎、講座、教師、生徒の多軸で比較・ランキングする。

システム構成

収集から警告表示までの経路
収集側 接続 · 保存 · イベント 構造化アルゴリズム(gRPC) 検索 · 分析 · 表示 ブラウザ <video> web-video-capture.js 毎秒 1 フレーム · 音声は 10 秒ごと 上り約 30kbps · 負荷 <5% IOAuthProxy 認可サービス :9001 Aliyun OSS パブリッククラウド MinIO オンプレミス配備 Notification Hub OSS トリガー → MNS ASR Worker日英音声のテキスト化 CV Worker顔の位置/向き/表情 Sound (VAD)発話の開始・終了と長さ Elasticsearch時系列ストアとして利用 Analyse TaskQueue Analyse Enginestats_engine :9002 ReportDB+ ClassDB 時間割 管理 バックエンド Vue MQTT イベントキュー 1883 / 8083 / 8084 トークン申請 webpwebm レッドライン事象 WebSocket でプッシュ → 教師画面に警告

担当業務

  • 統計エンジンのバックエンド(Tornado、約 1,650 行・21 ルート):授業/教師/生徒の一覧・詳細・履歴トレンド、授業態度の時系列カーブ、模範授業 TopN
  • Elasticsearch クエリ:bool + terms + range の組み合わせ、terms 集計に avg サブ集計をネスト(授業ごとの教師の平均 happy 確率・語数・話速)、大きな結果は scan / scroll で走査。CV と ASR の複数ソースをアプリ層で統合して並べ替え
  • 管理画面のフロントエンド(vue-element-admin 4.4):ロール別の動的ルーティング権限、データ大画面、授業/教師/生徒の一覧と詳細、ランキング、トレンド、絞り込み。ECharts で可視化、Docker 化と複数環境設定
  • アルゴリズム分析に参画:生徒の発話比率・まとまった表現・感情のポジティブ度から約 30 秒の「ハイライト」区間を抽出し、ノイズ・教材音声の混入・保護者の同席などの異常も印付け。保護者向けの学習状況レポートに利用

データフロー

ページ収集 SDK → OSS → ASR / CV / VAD Worker → Elasticsearch → 分析・統計エンジン → 管理画面 + MQTT リアルタイム警告

作業範囲: 機能設計 / 内部設計 / 製造 / 単体試験 / 結合試験
  • Python
  • Tornado
  • Elasticsearch
  • Redis
  • Vue 2
  • Element UI
  • ECharts
  • MQTT
  • Docker
  • Alibaba Cloud
所属:北京雲上作科技 会社ページへ
中国 2020

FaceID 顔認証・顔検索

AI × 教育(顔による本人確認) ・ アルゴリズムとサービスの開発

詳細を見る
  • Python
  • PyTorch
  • MXNet
  • dlib
  • ResNet18
  • Redis
  • +3

オンライン教育のお客様向けの顔認証:授業動画の映像から出演している生徒が本人かを確認し、全件・増分・指定人の顔検索で「1 人が複数アカウント」「複数人で 1 アカウント」を見つける。

システム構成

顔認証・検索の推論フロー(v3)
動画 授業動画ファイル ランダムフレーム抽出 320×240 に縮小 顔検出 YuFaceDetectNet · PyTorch 5 点ランドマーク アフィン整列 顔ごとに実施 品質フィルタ(MXNet Gluon · CPU) 遮蔽 目/鼻/口 > 0.5 は除外 姿勢・ぼけ ヨー・ピッチ・ロール・ぼけの超過は除外 年齢 最年少(17 歳未満)で生徒を特定 ResNet18 特徴 PyTorch · コサイン類似度 照合と保存 初回:特徴を登録 Redis hash に保存 以降:本人確認/検索 全体 · 増分 · 指定人 ライセンス制御 + Cython 納品 AES 上限 · SETNX ロック · .so

担当業務

  • 推論フロー:ランダムフレーム抽出 → YuFaceDetectNet による検出と 5 点ランドマーク → アフィン変換で整列 → 遮蔽・姿勢ぼけ・年齢の 3 モデルでフィルタ → ResNet18 で特徴抽出しコサイン類似度で照合。最年少の顔(17 歳未満)を採用して生徒本人を特定し保護者を除外
  • 複数フレームワークの混在推論:検出・特徴抽出は PyTorch、遮蔽・姿勢・年齢は MXNet Gluon、すべて CPU で実行。v1.0 から v3.4 まで継続改善(dlib 68 点 + Laplacian ぼけ検出 → モデル・整列の刷新 → 品質モデル 3 種の追加 → 全件検索と動画検証の書き直し)
  • Redis に特徴を保存し、全体・増分・指定人の 3 種類の検索に対応。全件の総当たり比較はコードのコメントで約 4,000 万回と見積もり
  • 商用ライセンス制御:呼び出し回数・有効期限・日次上限を AES 暗号化して Redis に保存、SETNX で分散ロック、デバイス SN を検証。コアモジュールは Cython で .so にして納品
  • 設定は「コマンドライン引数 > 環境変数 > JSON / YAML」の優先順位で読み込み。Docker で配備し、ビルド時に OSS からモデル重みを取得

データフロー

動画 → ランダムフレーム抽出 → 顔検出・整列 → 遮蔽・姿勢・年齢フィルタ → 特徴抽出 → コサイン照合/Redis 特徴 DB → 認証・検索結果

作業範囲: 機能設計 / 内部設計 / 製造 / 単体試験 / 結合試験
  • Python
  • PyTorch
  • MXNet
  • dlib
  • ResNet18
  • Redis
  • Cython
  • Docker
  • OSS
所属:北京雲上作科技 会社ページへ
中国 2020

WeChat スクリーンショットの自動認識(モーメンツ広告の配信確認)

AI × 広告配信の検証 ・ 学習・推論・サービス・配備

詳細を見る
  • Python
  • PyTorch
  • YOLOv5
  • PaddleOCR
  • PaddlePaddle
  • Tornado
  • +3

アップロードされた WeChat のスクリーンショットを自動認識し、モーメンツ広告の配信確認に使う。画面の種類(会話/タイムライン一覧/投稿詳細)を判定し、投稿時刻・広告文・ポスター ID・QR コードのリンク・いいね/コメント数を抽出する。

システム構成

スクリーンショット認識のフロー
スクリーンショット送信Tornado POST 検証 + OSS へ保存token · MD5 · nanoid YOLOv5s による主検出7 クラスのアイコン / QR コード ルール分類対象と相対位置で判定 チャット · プラスまたは三点アイコンあり タイムライン · カメラ → 公開範囲を検出 その他 投稿詳細 · QR コードの詳細画面での相対位置 PaddleOCR(DB 検出 + CRNN 認識) 位置から投稿時刻 · QR との相対位置から本文 「ID」キーワードからポスター ID QR コードのデコード 検出枠を切り出し → URL を取得 いいね数 / コメント数 右下を切り出し → YOLOv5 でアイコンを検出 → 3 層 CNN で数字を認識(検証 98.25%) JSON を集約して返却 · 全結果と処理時間を Elasticsearch へ · 独自エラーコード(212 / 218 …)

担当業務

  • YOLOv5s による主検出(UI 要素 7 クラス)とルールによる画面種別の判定。スクリーンショット 1 万枚超といいね/コメントアイコン 1 千枚超を自前で注釈し、k-means でアンカーボックスを算出
  • 投稿詳細:PaddleOCR(PP-OCR、DB 検出 + CRNN 認識)でレイアウト位置から投稿時刻・広告文・ポスター ID を取得。QR コードをデコード。右下を切り出して YOLOv5 でいいね/コメントのアイコンを検出し、3 層 CNN で数字を認識
  • Tornado + PyTorch + PaddlePaddle のサービス:token と MD5 による完全性検証、nanoid によるリクエスト追跡、元画像は OSS、全結果と処理時間を Elasticsearch へ保存して本番の異常応答の調査に活用
  • PP-OCR のモデルバージョンを更新し、ポスター ID と投稿時刻の認識率を向上

成果

  • ✓ 数字認識の 3 層 CNN:学習 98.95% / 検証 98.25% / テスト 84.45%

データフロー

スクリーンショット送信 → token / MD5 検証 → YOLOv5 で UI 検出・分類 → PaddleOCR + QR + いいね数認識 → JSON 返却。全結果を Elasticsearch へ

作業範囲: 機能設計 / 内部設計 / 製造 / 単体試験 / 結合試験
  • Python
  • PyTorch
  • YOLOv5
  • PaddleOCR
  • PaddlePaddle
  • Tornado
  • Elasticsearch
  • OSS
  • Docker
所属:北京雲上作科技 会社ページへ

その他の案件

  • ライブ配信審査ボックス
  • スタイル画生成(Midjourney 風)
  • 車両行動分析
  • 顔からの先天性疾患スクリーニング
その他の案件(Gitee 掲載) ↗

ARCHIVE

2019年の作品と受賞

大学時代から社会人1年目(2019年前後)に個人で作ったもの。数学専攻から独学でML・Webへ入っていった時期の記録です。フル版は当時のまま /2020/ に保存しています。

2018.10 – 2019.01

音楽系専攻 統一試験の運営・採点システム

抽選・受付・採点・成績集計までを試験会場の LAN 内で運用するシステム。複数の USB テンキーを Win32 Raw Input で区別して審査員ごとに独立採点し、ActiveX で Web に組み込み、点差超過の警告と最高・最低点除外の平均を実装。

  • C#
  • ASP.NET MVC 5
  • SQL Server
  • Redis
  • ActiveX
授業行動分析プロダクト(管理画面)

授業行動分析プロダクト(管理画面)

英会話教室向け。授業動画から生徒の集中度・教師の指標を可視化するダッシュボードを設計・実装。

  • Vue
  • ECharts
  • Tornado
データ大画面

データ大画面

教室・教師・生徒の集計指標を一望する大画面ビュー。

  • Vue
  • ECharts
生徒詳細レポート

生徒詳細レポート

在席率・笑顔率・挙手など行動指標を生徒ごとに集計し、週報/月報を生成。

  • scikit-learn
  • Tornado
授業中の行動分類

授業中の行動分類

抬頭・低頭・扭頭・机に伏せる・立ち上がる 等の姿勢を画像分類。ResNet を学習・適用。

  • PyTorch
  • ResNet
動画からの動作分類

動画からの動作分類

時系列を含む人体動作の分類に 3D-ResNet を使用。

  • PyTorch
  • 3D-ResNet
キーポイント検出(挙手・仰臥起坐カウント)

キーポイント検出(挙手・仰臥起坐カウント)

Detectron2 で人体キーポイントを取り、挙手判定や仰臥起坐の回数カウントに利用。

  • Detectron2
  • PyTorch
顔分析システム

顔分析システム

Dlib による顔ランドマーク検出と特徴抽出を行う MVC Web システムの試作。

  • Dlib
  • Tornado
  • MongoDB

受賞 ↗ 証書の画像を見る

  • 2018 全国大学生数学建模コンテスト — 河北省 二等賞
  • 2018 米国大学生数学モデリングコンテスト(MCM/ICM) — Successful Participant
  • 2018 全国大学生市場調査・分析大会(正大杯) — 河北省 一等賞
  • 2017 内モンゴル数学モデリングコンテスト — 参加・入賞
  • 2016–2019 学業奨学金 — 3 等(大2・大3・大4)ほか

卒業直後に作った最初の履歴書(画像)。2019 年卒の新卒としての内容です。

2019 · first-resume.png

2019 年版を開く ↗

上記はごく一部です。学習ノート・詳細スクリーンショット・当時のプロフィールは 2020 年版サイトにそのまま残しています。

2020 · resume-master

2020 年版を開く ↗

2023 年の転職活動で使っていた職務経歴書(PDF・中国語)。2019〜2023 年の中国での業務と案件をまとめています。

2023 · jia_rui_2023.pdf

2023 年版 PDF を開く ↗

2025 年の日本での就職活動で使った職務経歴書(Google スプレッドシート・日本語)。

2025 · Google Sheets

2025 年版を開く ↗

CONTACT

お問い合わせ

お仕事のご相談はメールでお願いします。