ระบบ
ทำงานอย่างไรHow the
system works
ภาพเดินทางจากกล้องมาถึงคุณอย่างไร โมเดลมาจากไหน ใครเป็นเจ้าของอะไร และอะไรที่เราตั้งใจไม่สร้าง ทุกตัวเลขในหน้านี้มาจากโค้ดที่รันอยู่จริง
How a picture travels from a camera to you, where the models come from, who owns what, and what we chose not to build. Every number on this page comes from the code that is running.
ภาพเดินทางอย่างไรHow a picture travels
คอมพิวเตอร์วิทัศน์ต้องการพิกเซล และเบราว์เซอร์จะยอมให้หน้าเว็บอ่านพิกเซลจากเว็บอื่นก็ต่อเมื่อเว็บนั้นอนุญาต (CORS) เราจึงแบ่งกล้องตามสิ่งที่ทำได้จริง
Computer vision needs pixels, and a browser only lets a page read pixels from another site when that site says so (CORS). So every camera is sorted by what is actually possible:
- วิดีโอสด สตรีม HLS (รูปแบบมาตรฐานในการส่งวิดีโอสดผ่านอินเทอร์เน็ต) จากโฮสต์ที่ส่ง
Access-Control-Allow-Origin: *เบราว์เซอร์ของคุณเล่นและอ่านเฟรมเองโดยตรง เซิร์ฟเวอร์ของเราไม่ได้แตะ - ภาพนิ่ง JPEG ที่หน่วยงานเผยแพร่ แต่ไม่มี CORS รีเลย์ของเราดึงภาพมาไว้ในหน่วยความจำแล้วส่งต่อ ไม่เขียนลงดิสก์
- ดูที่ต้นทาง เจ้าของมีแค่หน้าดูภาพ เราลิงก์ไปได้ แต่ไม่มีเครื่องไหนที่นี่อ่านพิกเซลได้
- ออฟไลน์ ระบบตรวจสุขภาพของ FloodDash พบว่าสตรีมล่ม
- Live video — HLS (the standard format for live video on the internet) from a host that sends
Access-Control-Allow-Origin: *. Your browser plays it and reads frames itself; our server never touches it. - Still — a JPEG the agency publishes without CORS. Our relay fetches it into memory and passes it along. Never written to disk.
- View at source — the owner only offers a viewer page. We link to it; no machine here can read its pixels.
- Offline — FloodDash's own health probe found the stream down.
รายชื่อกล้องมาจาก FloodDash ซึ่งรวบรวมกล้องสาธารณะจากเจ็ดแหล่งไว้แล้ว เซิร์ฟเวอร์ของเราอ่านรายชื่อนั้นทุก 10 นาที ถ้าอ่านไม่ได้ก็ใช้ฉบับล่าสุดที่ดีอยู่ แล้วเผยแพร่ที่ /api/cameras รายชื่อมีแค่ชื่อ ตำแหน่ง และประเภทกล้อง ไม่มีภาพ
The list of cameras comes from FloodDash, which already gathers public cameras from seven sources. Our server reads that list every 10 minutes — keeping the last good copy if it cannot — and publishes it at /api/cameras. The list holds names, places and kinds. No pictures.
กล้องหน้าของโทรศัพท์จะแสดงแบบกระจก เพราะคนคุ้นกับหน้าตัวเองแบบนั้น การกลับด้านทำที่ต้นทาง เลนส์และโมเดลทุกตัวจึงเห็นภาพเดียวกับที่คุณเห็น
A front camera is shown as a mirror, because that is how people expect their own face. The flip happens at the source, so every lens and model downstream sees the same picture you do.
ข้อควรรู้ตามตรง: เมื่อคุณดูวิดีโอสด เบราว์เซอร์ของคุณเชื่อมต่อกับเซิร์ฟเวอร์ของเจ้าของกล้องโดยตรง เจ้าของจึงเห็นที่อยู่เครือข่ายของคุณ เหมือนเว็บไซต์ทั่วไปที่คุณเปิด
One honest caveat: when you watch live video, your browser connects straight to the camera owner's server, so that server sees your network address — as any website you open would.
กติกาของรีเลย์The relay's rules
ที่เดียวที่เซิร์ฟเวอร์ของเราแตะภาพจากกล้อง จึงเป็นที่ที่มีกติกามากที่สุด ทุกข้อบังคับใช้ในโค้ด ไม่ใช่แค่สัญญาThe one place our server touches camera imagery, so the place with the most rules — each enforced in code, not promised in prose.
| กติกาRule | ค่าValue | ทำไมWhy |
|---|---|---|
| ในหน่วยความจำเท่านั้นMemory only | 30 วินาที30 s | ภาพหนึ่งภาพอยู่ในแคชไม่เกิน 30 วินาที ให้คนสิบคนที่ดูกล้องเดียวกันทำให้เจ้าของเสียแค่คำขอเดียว แล้วก็หายไป ไม่มีอะไรเขียนลงดิสก์ ภาพที่หมดอายุถูกล้างทุก 15 วินาทีA frame stays at most 30 s, so ten visitors watching one camera cost its owner one request; then it is gone. Nothing is written to disk. Expired frames are swept every 15 s. |
| จำนวนภาพในแคชFrames held | 240 | สูงสุด ภาพเก่าสุดออกก่อนAt most; the oldest leaves first. |
| ไม่ใช่พร็อกซีเปิด (ตัวกลางที่ใครก็สั่งให้ดึงอะไรก็ได้)Not an open proxy (a middle-man anyone could aim anywhere) | — | รับแค่รหัสกล้องจากรายชื่อ เซิร์ฟเวอร์เป็นคนหา URL เอง ไม่เคยสร้าง URL จากสิ่งที่ผู้ขอส่งมา และดึงได้เฉพาะโฮสต์ในรายการอนุญาตเท่านั้น: cctv.maholan.net, www.thaiclouderp.com, *.ipcamlive.com และภาพกรมทรัพยากรน้ำผ่าน FloodDash บนเครื่องเดียวกันOnly catalogue ids are accepted; the server looks up the URL itself and never builds one from the request. Only allow-listed hosts: cctv.maholan.net, www.thaiclouderp.com, *.ipcamlive.com, and Department of Water Resources stills via FloodDash on the same machine. |
| ไม่ตาม redirectNo redirects | — | ต้นทางที่สั่งให้ไปที่อื่นถือว่าล้มเหลว จึงพาเราออกนอกรายการอนุญาตไม่ได้An upstream that points elsewhere is treated as a failure, so it cannot lead us off the allow-list. |
| ภาพเท่านั้นImages only | JPEG · PNG · WebP | ต้องเล็กกว่า 4 MB ใหญ่กว่า 512 ไบต์ และตอบภายใน 9 วินาทีUnder 4 MB, over 512 bytes, answered within 9 s. |
| สุภาพกับต้นทางPolite upstream | 4 · 2 | ดึงพร้อมกันได้ไม่เกิน 4 ภาพรวม และไม่เกิน 2 ภาพต่อโฮสต์ ที่เหลือรอคิวAt most 4 fetches in flight overall and 2 per host; the rest wait their turn. |
| เบรกเกอร์Circuit breaker | 8 ครั้ง · 3 นาที8 fails · 3 min | โฮสต์ที่ล้มเหลวติดกัน 8 ครั้งจะถูกปล่อยให้พัก 3 นาที แทนที่จะโดนทุกคนที่เปิดหน้าเว็บรุมขอA host that fails 8 times in a row is left alone for 3 minutes instead of being hammered by everyone who opens the page. |
| บันทึกLogs | — | บันทึกแค่รหัสกล้อง สถานะ และเวลาที่ใช้ ไม่มีภาพ ไม่มีว่าใครดูCamera id, status and timing only. No pictures, and not who looked. |
ขีดจำกัดและเฮดเดอร์Limits and headers
อัตราการขอRate limits
ภาพนิ่ง: 150 ภาพต่อนาทีต่อผู้เยี่ยมชม ขอติดกันได้สูงสุด 60 ภาพ เกินนั้นได้คำตอบ 429 พร้อมขอให้รอ 20 วินาที เพราะกล้องเป็นของคนอื่น รายชื่อกล้อง: 60 ครั้งต่อนาที ติดกันได้ 20 ครั้ง ตัวนับใช้ที่อยู่เครือข่ายของคุณเป็นกุญแจ อยู่ในหน่วยความจำเท่านั้น และไม่ถูกเขียนลงบันทึก
Stills: 150 a minute per visitor, in bursts of up to 60; beyond that the answer is 429 and a request to wait 20 seconds, because the cameras belong to other people. The camera list: 60 a minute, bursts of 20. The counters are keyed by your network address, held in memory only, and never written to the logs.
ทางผ่านThe way in
เว็บนี้ให้บริการผ่านอุโมงค์ของ Cloudflare ซึ่งจัดการการเชื่อมต่อของคุณเหมือนผู้ให้บริการเครือข่ายทั่วไป
The site is served through a Cloudflare tunnel, which handles your connection as any network carrier would.
นโยบายความปลอดภัยของเนื้อหาContent Security Policy
สคริปต์ สไตล์ ฟอนต์ และโมเดลทั้งหมดมาจากเว็บนี้เอง ไม่มีโค้ดที่ซ่อนอยู่ในตัวหน้าเอง (สคริปต์ในบรรทัด) ไม่มีการสั่งรันโค้ดที่แนบมากับคำขอ (eval) และไม่มีหน้าเว็บอื่นถูกฝังอยู่ในหน้านี้ (iframe) การเชื่อมต่อออกไปข้างนอกที่หน้าเว็บทำได้มีแค่วิดีโอจากโฮสต์ที่รายชื่อเรียกว่า “วิดีโอสด”
Every script, style, font and model is served from here. No code hidden inside the page itself (inline scripts), no running code sent in with a request (eval), and no other web page embedded inside this one (iframes). The only third-party traffic a page may make is camera video, and only to the hosts the catalogue calls “video”.
script-src 'self'·style-src 'self'·font-src 'self'media-src·connect-src: เว็บนี้ และthis site, plus camerai1.iticfoundation.org, camera1.iticfoundation.org, *.ipcamlive.comframe-src 'none'·object-src 'none'·frame-ancestors 'none'Permissions-Policy: camera=(self), microphone=(), geolocation=()กล้องเปิดได้เฉพาะหน้าของเราและเมื่อคุณอนุญาต ไมโครโฟนและตำแหน่งปิดตาย— the camera only for our own pages and only when you allow it; microphone and location are switched off entirely.
อะไรถูกเก็บไว้ที่ไหนWhat is cached, where
| อะไรWhat | นานแค่ไหนHow long | หมายเหตุNote |
|---|---|---|
| โมเดล ฟอนต์ ไลบรารีModels, fonts, libraries | 1 ปี1 year | ไม่เปลี่ยนภายใต้ที่อยู่เดิม รุ่นใหม่ได้โฟลเดอร์ใหม่ ดาวน์โหลดครั้งแรกครั้งเดียวNever change under the same path; a new version gets a new folder. Downloaded once. |
| รูปและข้อมูลประกอบImages, data files | 1 ชั่วโมง1 hour | — |
| หน้าเว็บ JS และ CSS ของเราOur pages, JS and CSS | ตรวจทุกครั้งRevalidated every load | ถ้าไม่เปลี่ยน ตอบสั้น ๆ ว่า 304A cheap 304 when unchanged. |
| รายชื่อกล้องCamera list | 60 วินาที60 s | เหมือนกันสำหรับทุกคนThe same for everyone. |
| ภาพนิ่งจากรีเลย์Relayed still | 20 วินาที ในเบราว์เซอร์คุณ · 30 วินาที ในหน่วยความจำเซิร์ฟเวอร์20 s in your browser · 30 s in server memory | “private” แคชที่ใช้ร่วมกันห้ามเก็บMarked private: shared caches may not keep it. |
| ภาษาที่คุณเลือก และคะแนนสูงสุดในเกมYour language choice and best game scores | จนกว่าคุณจะลบUntil you clear it | localStorage ในเบราว์เซอร์คุณ ไม่มีคุกกี้localStorage in your browser. No cookies. |
| ภาพจากกล้องหรือรูปของคุณYour camera or photo | ไม่เก็บเลยNever kept | อยู่ในแท็บระหว่างที่เปิด ปิดแท็บก็หายไปLives in the tab while open; gone when you close it. |
โมเดลมาจากไหนWhere the models come from
| โมเดลModel | ทำอะไรDoes | ฝึกจากTrained on | ขนาดSize | ที่มาSource |
|---|---|---|---|---|
| SSDLite MobileNetV2 | ตรวจจับวัตถุ: กรอบ ประเภท ความมั่นใจObject detection: box, class, confidence | COCO, 80 ประเภทCOCO, 80 categories | 18.0 MB | คลังโมเดล TensorFlow.js, Apache-2.0TensorFlow.js model zoo, Apache-2.0 |
| MobileNetV2 1.0 · 224 | ลายนิ้วมือ 1,280 ตัวเลข และการเดา ImageNetA 1,280-number fingerprint, and ImageNet guesses | ImageNet, 1,000 หมวดImageNet, 1,000 classes | 14.0 MB | คลังโมเดล TensorFlow.js, Apache-2.0TensorFlow.js model zoo, Apache-2.0 |
น้ำหนักของโมเดลเก็บไว้บนเว็บนี้เองใต้ /models ไม่โหลดจากที่อื่น และจะโหลดก็ต่อเมื่อคุณกดปุ่มหรือเลื่อนมาถึงเครื่องมือที่ต้องใช้ ไลบรารี TensorFlow.js 4.22.0 (1.4 MB) คำนวณบนชิปกราฟิกผ่าน WebGL (วิธีที่เบราว์เซอร์ใช้การ์ดจอ) ถ้าไม่ได้ก็ใช้ CPU หลังการตรวจจับ กล่องสองกล่องอาจครอบทับสิ่งเดียวกัน ขั้นตอนที่เก็บเฉพาะกล่องที่ดีกว่าจึงเขียนใหม่ตาม @tensorflow-models/coco-ssd 2.2.3 (Apache-2.0) เพื่อให้มันทำงานบนชิปกราฟิกด้วย ชื่อหมวดของ ImageNet แสดงเป็นภาษาอังกฤษเท่านั้น เราเลือกแสดงตามจริงมากกว่าแปลด้วยเครื่องพันคำ งานวิจัยเบื้องหลังอยู่ที่หน้างานวิจัย
The weights are hosted here under /models, never fetched from elsewhere, and load only when you press a button or scroll to a bench that needs them. TensorFlow.js 4.22.0 (1.4 MB) does the arithmetic on your graphics chip through WebGL (the browser’s way of using a graphics chip), or on the CPU if it must. After a detection, two boxes can cover the same thing; the step that keeps only the better one is rewritten from @tensorflow-models/coco-ssd 2.2.3 (Apache-2.0) so it, too, runs on the graphics chip. ImageNet's class names are shown in English only: we would rather say so than machine-translate a thousand nouns. The papers behind them are on the research page.
สถานะตอนนี้Live status
อ่านจาก /api/health และ /api/cameras ขณะที่คุณเปิดหน้านี้Read from /api/health and /api/cameras as you open this page.
| … |
| แหล่งSource | ในรายชื่อListed | วิดีโอVideo | ภาพนิ่งStill | ดูที่ต้นทางView | ออฟไลน์Off |
|---|---|---|---|---|---|
| … | |||||
สิ่งที่เราตั้งใจไม่สร้างWhat we chose not to build
- การจดจำใบหน้าFace recognitionระบบนับได้ว่ามี “คน” อยู่ แต่ไม่มีโค้ดส่วนไหนพยายามบอกว่าคนนั้นเป็นใคร เครื่องมือที่ตามหาคนคนหนึ่งข้ามกล้องสาธารณะนับพันตัว ไม่ควรมีไว้ให้ใครก็ได้ใช้It can count that a “person” is there. No code here tries to say who. A tool that finds one person across thousands of public cameras should not be available to anyone who opens a page.
- การอ่านป้ายทะเบียนNumber-plate readingป้ายทะเบียนพาไปถึงตัวเจ้าของรถ เรานับรถได้โดยไม่ต้องรู้ว่าเป็นคันไหนA plate leads to a person. We can count cars without knowing which car is which.
- การเก็บภาพStoring imageryไม่มีคลังภาพ ไม่มีย้อนหลัง ไม่มีชุดข้อมูลที่แอบสะสมไว้ ภาพนิ่งอยู่ในหน่วยความจำ 30 วินาทีแล้วหายไปNo archive, no history, no dataset quietly accumulating. A still lives 30 s in memory and is gone.
- บัญชีผู้ใช้Accountsไม่ต้องสมัคร ไม่ต้องเข้าสู่ระบบ ไม่มีรหัสผ่านให้รั่วNothing to sign up for, nothing to log in to, no passwords to leak.
- การวิเคราะห์และติดตามผู้ใช้Analytics and trackingไม่มีสคริปต์ของบุคคลที่สาม ไม่มีโฆษณา ไม่มีคุกกี้ เราไม่รู้ว่าคุณเป็นใครหรือดูอะไร และอยากให้เป็นแบบนั้นNo third-party scripts, no ads, no cookies. We do not know who you are or what you looked at, and prefer it that way.
- การประมวลผลบนเซิร์ฟเวอร์Server-side inferenceเซิร์ฟเวอร์ไม่เคยดูภาพ มันแค่ส่งต่อบางภาพ การคำนวณทั้งหมดเกิดในเบราว์เซอร์ของคุณThe server never looks at a picture; it only passes some along. Every computation happens in your browser.
ที่มาและเครดิตSources and credits
เจ้าของกล้องThe camera owners
กล้องทุกตัวเป็นของหน่วยงานที่ติดตั้งและดูแล เราเพียงลิงก์ไปและส่งต่อภาพ ขอขอบคุณที่เปิดภาพเหล่านี้ให้สาธารณะ
Every camera belongs to the agency that installed and runs it. We only link to them and pass frames along. Thank you for making them public.
| แหล่งSource | ใครWho |
|---|---|
| GISTDA | สำนักงานพัฒนาเทคโนโลยีอวกาศและภูมิสารสนเทศ (องค์การมหาชน) รวมกล้องถนนของกรุงเทพมหานคร กรมทางหลวง และ iTICGeo-Informatics and Space Technology Development Agency, carrying road cameras of the Bangkok Metropolitan Administration, the Department of Highways and iTIC |
| iTIC | มูลนิธิศูนย์ข้อมูลจราจรอัจฉริยะไทยIntelligent Traffic Information Center Foundation |
| NST | เทศบาลนครนครศรีธรรมราชNakhon Si Thammarat City Municipality |
| ปากเกร็ดPak Kret | เทศบาลนครปากเกร็ด จังหวัดนนทบุรีPak Kret City Municipality, Nonthaburi |
| รังสิตRangsit | เทศบาลนครรังสิต จังหวัดปทุมธานี (ผ่าน IPCamLive)Rangsit City Municipality, Pathum Thani (via IPCamLive) |
| กรมทรัพยากรน้ำDWR | กรมทรัพยากรน้ำ กล้องที่สถานีโทรมาตรDepartment of Water Resources, telemetry-station cameras |
| cctv.maholan.net | รายชื่อกล้องน้ำท่วมที่รวมกล้องของกรมทางหลวง iTIC และเทศบาลต่าง ๆA flood-camera catalogue gathering Department of Highways, iTIC and municipal cameras |
ซอฟต์แวร์ ข้อมูล และการออกแบบSoftware, data and design
- FloodDash รวบรวมรายชื่อกล้องจากเจ็ดแหล่งให้ เราอ่านจากที่เดียวแทนการไปดึงซ้ำจากเจ็ดต้นทาง
- TensorFlow.js 4.22.0 โดย Google, Apache-2.0 พร้อมน้ำหนักโมเดลจากคลังโมเดลของ TensorFlow.js (Apache-2.0)
- hls.js 1.5.20, Apache-2.0 ใช้เล่นวิดีโอสด
- ฟอนต์ภายใต้ SIL Open Font License 1.1: Archivo Narrow (สัญญาอนุญาต), IBM Plex Sans และ IBM Plex Sans Thai (สัญญาอนุญาต), JetBrains Mono (สัญญาอนุญาต)
- ชุดข้อมูล: COCO (Lin et al., 2014) สำหรับตัวตรวจจับ และ ImageNet (Deng et al., 2009) สำหรับ MobileNetV2 ใช้ผ่านน้ำหนักที่ฝึกไว้แล้ว ภาพจากชุดข้อมูลไม่ได้อยู่บนเว็บนี้
- สี: จานที่ 303 ของซันโซ วาดะ (1883–1967) ตามการแปลงเป็นค่าดิจิทัลใน Palette แต่ละเฉดมีสามขั้นความเข้ม ด้วยสูตรเดียวกันทั้งสี่เฉด
- ห้องขับรถ: แบบจำลองการขับของ Treiber, Hennecke & Helbing (2000) และแนวคิดคาดแล้วค่อยตรวจของ Frenetix · เรื่องข้อมูลภาพถนนจากการท้าทายของมนุษย์อ้างอิง คำอธิบาย reCAPTCHA ของกูเกิล, von Ahn et al. (2008) และ Goodfellow et al. (2014)
- FloodDash gathers the camera list from seven sources, so we read one aggregator instead of re-scraping seven upstreams.
- TensorFlow.js 4.22.0 by Google, Apache-2.0, with model weights from the TensorFlow.js model zoo (Apache-2.0).
- hls.js 1.5.20, Apache-2.0, plays the live video.
- Fonts under the SIL Open Font License 1.1: Archivo Narrow (licence), IBM Plex Sans and IBM Plex Sans Thai (licence), JetBrains Mono (licence).
- Datasets: COCO (Lin et al., 2014) for the detector and ImageNet (Deng et al., 2009) for MobileNetV2, used through pretrained weights. No dataset images are on this site.
- Colour: Plate 303 of Sanzo Wada (1883–1967), as converted to digital values in Palette. Each of the four hues also carries a three-step tone ladder, built on one shared formula.
- The Drive room: the driving model of Treiber, Hennecke & Helbing (2000) and the predict-then-check idea behind Frenetix · on human-labelled street imagery, see Google's own description of reCAPTCHA, von Ahn et al. (2008) and Goodfellow et al. (2014)
สร้างและดูแลโดย ดร.นน อัครประเสริฐกุล เงื่อนไขการใช้และการขอถอดกล้องอยู่ที่หน้าข้อกฎหมาย
Made and run by Dr Non Arkaraprasertkul. Terms and takedowns are on the fine print.