
อัปโหลดวีดีโอการแข่งขัน ตรวจจับและติดตามมุมแดงและมุมน้ำเงิน วิเคราะห์ท่าทาง การโจมตี และจังหวะทุกเฟรม
มวยไทย คือการต่อสู้แบบยืนสู้ที่มีประสิทธิภาพและอันตรายที่สุดในโลก
การเชียร์กีฬามวยไทยเป็นการเชียร์กีฬาที่สนุกดุเดือดที่สุดในโลก
เว็บไซต์นี้เป็นแหล่งรวบรวม Dataset ของการแข่งขันชกมวยไทยหลายหมื่นคู่ รวมเวลาการแข่งขันหลายหมื่นชั่วโมง ตั้งแต่ปี พ.ศ. 2528 กว่า 40 ปี ถือเป็นฐานข้อมูล Dataset ด้านการแข่งขันมวยไทยที่มากที่สุดในโลก
งานวิจัยของเราสอนให้ AI แยกร่างนักมวยแต่ละคนออกจากภาพในสังเวียนที่ซับซ้อน สร้างโครงกระดูก ตรวจจับและเก็บการเคลื่อนไหว เพื่อนำไปสร้าง Animation 3D และวิเคราะห์ท่าทางการต่อสู้

สร้าง mask แยกนักมวย A (แดง), B (น้ำเงิน), กรรมการ (เทา) และสิ่งรบกวน ได้แม้อยู่ในจังหวะกอดปล้ำหรือถูกบดบัง
ใช้สีมุม, ขอบเขตเวที (ROI), ขนาดลำตัว, ความเร็ว และความต่อเนื่องตามเวลา เพื่อคงรหัสประจำตัวนักมวยให้ถูกคนทุกเฟรม
จุดข้อต่อ 2D (COCO 17 / whole-body 133) ถูกยกเป็นข้อต่อ 3D พร้อมการปรับให้ลื่นไหลตามเวลา ทำให้เข่า ศอก และสะโพกสมจริงตามกายภาพ
จับข้อต่อเข้ากับโครงกระดูกมนุษย์มาตรฐาน (ลำดับชั้นแบบ SMPL) แล้วส่งออกเป็นคลิปการเคลื่อนไหว BVH, FBX หรือ GLB พร้อมทำ retarget
นำคลิปไป retarget ใส่ตัวละคร 3D ใน Studio และใช้ข้อมูลชุดเดียวกันตรวจจับหมัด-เตะ จำแนกเทคนิค และวิเคราะห์สมรรถนะ
งานวิจัยสายที่สองเปลี่ยนการเคลื่อนไหวที่จับได้ให้เป็นนักมวย 3D ที่เล่นและวิเคราะห์ได้ — อวตารมวยไทยที่มีโครงกระดูกพร้อมรับคลิปท่าทางใดก็ได้ ต่อยอดไปเป็นเกมต่อสู้เสมือนจริง การซ้อม VR และการวิเคราะห์เชิงชีวกลศาสตร์
ใช้โมเดลร่างกายแบบพารามิเตอร์ (แนว SMPL-X) ปรับตามส่วนสูง ความยาวแขนขา และช่วงเอื้อมของนักมวยแต่ละคน ให้อวตารคงสัดส่วนจริงของนักกีฬา
ใช้ชื่อกระดูกมาตรฐานเดียวกัน (เข้ากันได้กับ Mixamo/Unreal) ทำให้คลิปใดก็รีทาร์เก็ตลงอวตารใดได้ พร้อมคะแนนความตรงกันของกระดูกเพื่อเตือนเมื่อ rig ไม่เข้ากัน
ล็อกเท้า/IK ลดการสั่น และแก้จุดสัมผัสพื้น เพื่อไม่ให้เท้าไถลหรือลอย ก่อนบันทึกคลิปเป็น FBX หรือ GLB
นำคลิปเข้า Unity, Unreal, Blender หรือ three.js ได้ พร้อมลูปที่เบลนด์ต่อกันได้ทั้งท่าตั้งการ์ด ถีบ เข่า ศอก และการโหน/คลินช์
วัดมุมข้อต่อ ความเร็วเชิงมุม การแยกสะโพก-ไหล่ และจังหวะการออกอาวุธบนโครงกระดูกอวตาร ข้อมูลชุดเดียวกันใช้ให้ฟีดแบ็กโค้ชและฝึก AI คู่ต่อสู้

งานวิจัยสายที่สามคือ AI ตัดต่อวีดีโอ อัพโหลดวีดีโอการแข่งขันมวยไทยทั้งแมทช์เข้าระบบ ระบบจะวิเคราะห์และจัดประเภทของทุกซีน เช่น การประกาศบนเวที ช่วงพักยก ช่วงนับ (8 Count) ภาพรีเพลย์ และช่วงโฆษณา แล้วตัดออกไป เหลือไว้เฉพาะช่วงที่นักมวยกำลังต่อสู้กันจริง ผลลัพธ์คือ Dataset ที่สะอาดและเข้มข้น พร้อมนำไปเทรนโมเดลตรวจจับท่าทาง การออกอาวุธ และวิเคราะห์เทคนิค

อัพโหลดไฟล์การแข่งขันเต็มแมทช์ (45 นาทีขึ้นไป ขนาดหลาย GB) เพียงครั้งเดียว ระบบแยกเสียงออกมา และสุ่มเฟรมที่ 1–4 FPS เพื่อใช้วิเคราะห์ซีน โดยไฟล์ต้นฉบับยังคงคุณภาพเดิมไว้สำหรับการตัดจริง
ตรวจหารอยต่อช็อต (PySceneDetect / histogram + motion) เพื่อแบ่งแมทช์เป็นช็อตย่อย แล้วใช้โมเดลจัดประเภทวีดีโอร่วมกับสัญญาณ ROI ของเวที จำนวนนักมวย ตำแหน่งกรรมการ และกราฟิก/โลโก้ เพื่อระบุว่าแต่ละช็อตคือ ต่อสู้ ประกาศ พักยก นับ หรือโฆษณา
ตัดช่วงที่ไม่ใช่การต่อสู้ออก รวมช่องว่างสั้น ๆ เข้าด้วยกัน และเผื่อขอบไว้เล็กน้อยเพื่อไม่ให้ตัดคาการออกอาวุธ พร้อมกฎความยาวขั้นต่ำเพื่อกำจัดผลบวกลวงที่กระพริบ
ffmpeg ตัดช่วงที่เก็บไว้ตรงคีย์เฟรมและต่อรวมเป็นไฟล์เฉพาะซีนต่อสู้ไฟล์เดียว พร้อมไฟล์ EDL/JSON กำกับที่แม็พทุกวินาทีของผลลัพธ์กลับไปยังไทม์โค้ดต้นฉบับ
ไฟล์เฉพาะซีนต่อสู้จะถูกบันทึกเป็นแหล่งข้อมูลของ Dataset และเข้าคิวประมวลผลตรวจจับ ติดตาม และสกัดท่าทาง ได้เฟรมต่อสู้ที่ใช้งานได้มากขึ้นราว 2–3 เท่าต่อพื้นที่จัดเก็บเท่ากัน
| ประเภทซีน | สัญญาณที่ใช้ตรวจจับ | การจัดการ |
|---|---|---|
| ช่วงต่อสู้ | นักมวย 2 คนอยู่ใน ROI ของเวที ความเร็วแขนขาสูง กรรมการอยู่ห่าง | เก็บไว้ |
| ประกาศบนเวที | โฆษก/ไมค์อยู่กลางเวที ผู้ชมนิ่ง นักมวยอยู่มุม | ตัดออก |
| พักยก / เข้ามุม | มีเก้าอี้ พี่เลี้ยงขึ้นเวที นาฬิกาหยุด นักมวยนั่ง | ตัดออก |
| ช่วงนับ (8 Count) / กรรมการสั่งหยุด | ภาพโคลสอัพกรรมการ นักมวยล้มหรือยืนมุมกลาง | ตัดออก |
| โฆษณา / ภาพคั่น | ไม่ใช่ภาพในเวที มีเฟรมโลโก้/กราฟิก มีเสียงจิงเกิล | ตัดออก |
| รีเพลย์ / สโลว์โมชัน | อัตราเฟรมผิดปกติ มีกราฟิกเปลี่ยนภาพ แอ็กชันซ้ำ | ตัดออก (หรือติดแท็ก) |
กระบวนการตัดต่อทั้งหมดทำงานเองโดยไม่ต้องมีคนคุม ใช้ n8n เฝ้าดูไฟล์ที่อัพโหลดเข้ามาใหม่ แล้วร้อยขั้นตอนวิเคราะห์ซีน คัดกรอง และตัดด้วย ffmpeg จนได้ผลลัพธ์กลับเข้า Dataset
ตัวอย่างจริงของการนำ AI Avatar มวยไทยไปต่อยอดในเกมต่อสู้เสมือน: ชุดท่าทางถูกจับจากไฟต์จริง ทำความสะอาด รีทาร์เก็ต แล้วส่งเข้าเกมเอนจินเป็นสเตตแอนิเมชันที่เบลนด์ต่อกันได้ทันที
อวตารสองตัวขับด้วยชุดท่าทางที่จับมาจริง มีช่วงจังหวะออกอาวุธ สเตตการ์ด และการเปลี่ยนเข้าคลินช์ตามข้อมูลจังหวะจริง
อวตารต้นแบบแสดงคอมโบใน VR ผู้เล่นทำตามแล้วได้คะแนนจากมุมข้อต่อ การหมุนสะโพก และจังหวะ
action event จริงกลายเป็น state และ reward ให้เอเจนต์ reinforcement learning ที่ต่อสู้ในสไตล์มวยไทย ไม่ใช่คิกบ็อกซิ่งทั่วไป
รีเพลย์ทุกจังหวะบนอวตารจากมุมกล้องใดก็ได้ พร้อมค่ามุมและความเร็วซ้อนบนภาพเพื่อใช้สอน
เส้นทางตั้งแต่วิดีโอที่อัปโหลด ไปจนถึงคลิปแอนิเมชันที่รันในเกมเอนจิน
| ขั้นตอน | ผลลัพธ์ | ทำงานที่ไหน |
|---|---|---|
| รับข้อมูล & แยกร่าง | mask ต่อเฟรม, ตัวตน A/B/กรรมการ | AI worker → /api/public/ai/ingest |
| Pose & ยกเป็น 3D | keypoint 2D → แทร็กข้อต่อ 3D | AI worker (โมเดล pose + lifting) |
| ตรวจทาน & แก้ไข | แทร็กที่ยืนยันแล้ว แก้ตัวตน/ท่าทาง | Dashboard → Review / Corrections |
| รีทาร์เก็ตลงอวตาร | แอนิเมชันบนโครงกระดูกชื่อมาตรฐาน | 3D Studio (three.js) |
| ทำความสะอาด | โมชันที่ล็อกเท้าและลดการสั่น | 3D Studio / สคริปต์ Blender |
| ส่งออก | คลิป GLB / FBX + เมทาดาทา | ส่งออกจาก Studio หรือสคริปต์ CLI |
สคริปต์ตัวอย่างสำหรับขั้นส่งออก คัดลอกไปใช้ในไปป์ไลน์ของคุณได้เลย
# Blender 4.x — bake foot-lock + batch export FBX clips
import bpy, os
RIG = bpy.data.objects["MuayThai_Rig"]
OUT = "/export/fbx"
os.makedirs(OUT, exist_ok=True)
for action in bpy.data.actions:
RIG.animation_data.action = action
# bake IK foot constraints down to FK keys (removes foot sliding)
bpy.ops.nla.bake(
frame_start=int(action.frame_range[0]),
frame_end=int(action.frame_range[1]),
only_selected=False, visual_keying=True,
clear_constraints=True, bake_types={"POSE"},
)
bpy.ops.export_scene.fbx(
filepath=os.path.join(OUT, f"{action.name}.fbx"),
use_selection=True, add_leaf_bones=False,
bake_anim=True, bake_anim_use_nla_strips=False,
bake_anim_simplify_factor=0.0, armature_nodetype="ROOT",
apply_scale_options="FBX_SCALE_ALL", axis_forward="-Z", axis_up="Y",
)// three.js — export a retargeted clip as GLB (binary)
import { GLTFExporter } from "three/examples/jsm/exporters/GLTFExporter.js";
export async function exportClipAsGlb(avatar: THREE.Object3D, clip: THREE.AnimationClip) {
const scene = new THREE.Scene();
scene.add(avatar);
const exporter = new GLTFExporter();
const glb = await exporter.parseAsync(scene, {
binary: true,
animations: [clip],
includeCustomExtensions: false,
});
return new Blob([glb as ArrayBuffer], { type: "model/gltf-binary" });
}// Unity — register imported clips as blendable fight states
using UnityEngine;
using UnityEditor.Animations;
public static class MuayThaiClipImporter {
public static void Build(AnimatorController ctrl, AnimationClip[] clips) {
var layer = ctrl.layers[0].stateMachine;
foreach (var clip in clips) {
var state = layer.AddState(clip.name);
state.motion = clip;
// loop guard/idle, one-shot strikes
var isLoop = clip.name.StartsWith("guard") || clip.name.StartsWith("idle");
var t = layer.AddAnyStateTransition(state);
t.duration = isLoop ? 0.20f : 0.08f; // blend time
t.hasExitTime = !isLoop;
t.AddCondition(AnimatorConditionMode.If, 0, clip.name);
ctrl.AddParameter(clip.name, AnimatorControllerParameterType.Trigger);
}
}
}