diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..5008ddf Binary files /dev/null and b/.DS_Store differ diff --git a/README.md b/README.md deleted file mode 100644 index ad4c757..0000000 --- a/README.md +++ /dev/null @@ -1,105 +0,0 @@ -# Smart Behavioral Video Compression -**Sentio Mind · POC Assignment · Project 2** - -GitHub: https://github.com/Sentiodirector/Assignement_Video_compression.git -Branch: FirstName_LastName_RollNumber - ---- - -## Why This Exists - -Four cameras running all day in a school building produce 40 to 80 GB of raw footage. Uploading that to the Sentio Mind server over a typical school internet connection takes 6 to 12 hours. That is not practical. - -Blindly compressing with ffmpeg throws away frames that contain people, which breaks the analysis. Your job is to build a smarter compressor — one that keeps every frame containing a human and aggressively discards empty hallway footage and near-duplicate frames. - ---- - -## What You Receive - -``` -p2_video_compression/ -├── video_sample_1.mov ← 2-3 min raw CCTV clip, download from dataset link -├── video_compression.py ← your template — copy to solution.py -├── video_compression.json ← schema for segments_kept.json -└── README.md -``` - ---- - -## What You Must Build - -Run `python solution.py` → it must produce: - -1. `compressed_output.mp4` — H.264, 12 fps, at least 70% smaller than input -2. `compression_report.html` — size comparison, duration comparison, thumbnail storyboard -3. `segments_kept.json` — follows `video_compression.json` schema exactly - -### Decision Algorithm (implement in this exact order) - -``` -For each frame: - -Step 1 — pHash similarity - Compute perceptual hash of this frame. - If similarity to last kept frame > 0.95 → discard (near-duplicate). - -Step 2 — Motion score - Compute dense optical flow vs previous frame. - If motion_score < 0.05 → mark as discard candidate (static empty scene). - -Step 3 — Face override - Run Haar face detection. - If any face found → keep this frame regardless of steps 1 and 2. - -Step 4 — Motion override - If no face found but motion_score > 0.15 → keep anyway. - -Step 5 — Context frame rule - Every 3 seconds of original video → force-keep one frame no matter what. -``` - -Then re-encode all kept frames to H.264 MP4 at 12 fps using ffmpeg. - -### Performance Targets - -- File size reduction: 70% or more -- Processing speed: 2-minute video must finish in 10 seconds or less on a laptop - ---- - -## Hard Rules - -- Do not rename functions in `video_compression.py` -- Do not change key names in `video_compression.json` -- Output video must play in VLC without codec issues -- `compression_report.html` must work offline -- Python 3.9+, no Jupyter notebooks -- ffmpeg must be installed: `sudo apt install ffmpeg` - -## Libraries - -``` -opencv-python==4.9.0 numpy==1.26.4 imagehash==4.3.1 Pillow==10.3.0 -``` - ---- - -## Submit - -| # | File | What | -|---|------|------| -| 1 | `solution.py` | Working script | -| 2 | `compressed_output.mp4` | Compressed video | -| 3 | `compression_report.html` | Report with storyboard | -| 4 | `segments_kept.json` | Segment log matching schema | -| 5 | `demo.mp4` | Screen recording under 2 min | - -Push to your branch only. Do not touch main. - ---- - -## Bonus - -Auto-calibrate the motion threshold from the first 30 seconds of the video. Different cameras at different lighting levels need different thresholds — hardcoding 0.05 for every camera is fragile. - -*Sentio Mind · 2026* diff --git a/compressed_output.mp4 b/compressed_output.mp4 new file mode 100644 index 0000000..0f95a21 Binary files /dev/null and b/compressed_output.mp4 differ diff --git a/compression_report.html b/compression_report.html new file mode 100644 index 0000000..ecfe485 --- /dev/null +++ b/compression_report.html @@ -0,0 +1 @@ +
Time: 71.68s
Reduction: 98.9%
\ No newline at end of file diff --git a/demo.mov b/demo.mov new file mode 100644 index 0000000..35802ae Binary files /dev/null and b/demo.mov differ diff --git a/segments_kept.json b/segments_kept.json new file mode 100644 index 0000000..bb5212a --- /dev/null +++ b/segments_kept.json @@ -0,0 +1,72 @@ +{ + "original_size_mb": 614.16, + "compressed_size_mb": 6.96, + "reduction_pct": 98.9, + "processing_time_sec": 71.68, + "segments": [ + { + "segment_id": 1, + "start_sec": 0.0, + "end_sec": 41.32, + "frames_in_segment": 97, + "reason_kept": "perceptual_hash", + "thumbnail_b64": "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" + }, + { + "segment_id": 2, + "start_sec": 44.33, + "end_sec": 44.33, + "frames_in_segment": 1, + "reason_kept": "scene_continuity", + "thumbnail_b64": "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" + }, + { + "segment_id": 3, + "start_sec": 44.54, + "end_sec": 58.28, + "frames_in_segment": 35, + "reason_kept": "perceptual_hash", + "thumbnail_b64": "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" + }, + { + "segment_id": 4, + "start_sec": 61.01, + "end_sec": 80.9, + "frames_in_segment": 75, + "reason_kept": "perceptual_hash", + "thumbnail_b64": "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" + }, + { + "segment_id": 5, + "start_sec": 81.01, + "end_sec": 81.04, + "frames_in_segment": 2, + "reason_kept": "face_detected", + "thumbnail_b64": "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" + }, + { + "segment_id": 6, + "start_sec": 81.11, + "end_sec": 101.79, + "frames_in_segment": 47, + "reason_kept": "perceptual_hash", + "thumbnail_b64": "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" + }, + { + "segment_id": 7, + "start_sec": 104.79, + "end_sec": 104.79, + "frames_in_segment": 1, + "reason_kept": "scene_continuity", + "thumbnail_b64": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA0JCgsKCA0LCgsODg0PEyAVExISEyccHhcgLikxMC4pLSwzOko+MzZGNywtQFdBRkxOUlNSMj5aYVpQYEpRUk//2wBDAQ4ODhMREyYVFSZPNS01T09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0//wAARCABoAMgDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDofFdhBZafbvawHc04SR8k4XYxz6dQK5Xr07jmu5166hvvCk9zaSb4n27WwRnDgHrXExpzVLXcUkbPhe4aDWoIwhYXAaMkfwgKWz/47j8a2tQurPT/ABXFeXdwIh9haPkdcyKR0HPQ1g6CLe41eG2dyd4bIRyD908ZFXvEVhaWV1psUOn+bDOZklAJLuzAFcscnO7uT9SBmqlZFQ1LEHiGKTXpfs8DbJ7RWRpz5QO1n2tzztbI5GT0+XrjL8RaqGW4jkaJALtHwjlsp5TYPQH+FeMdTjnqci2mguFtY4SGKQO21MogJYEYH4ck8nqeapa0Hiurxm+5KiMhzkbQBz+YNTD3mKq+VaBLqluuUQO528EDAzTgyrtZyAoHUnFYJYxyfN95TyD61rXDGSz2opZnHA960mkmjKEnJMivr6F7VooyxLDqB05rIlkAUEkY/lTGZth3KVI7GrltpVzLbCeRAM48tG53Z7nGcUqi7BBt7lFpMrgHNWLW6lQhvOYoWwV560/UdPhgSaSGUMImCFS4B3HHA9e56evpWUpYqVViFzuK5wM1MXYqSPQZvGVs/hWPR7eO5juFt44A4IVflwDggg8gAenP58yt9vstkE0izqhVtwGPLwSepOevbHA6VlNL5joHYqowCcbvqcd6W4SJpGNvIWiAwCQAWP0znHf/ADmhaDburFxJQ+dh4YY/Wupjnl8gJuO0dOa5rRn017Zob0tFNvBSUMRkHAx0ICjkknn0zW1DKEiMryQeX5jRptnVixBxx0J6g9BwQeldEKqvZnm4qlNK8S2b66i6TMQf73P86F1h1/1kStz2OMCoZHUgcZzjtWZNeQiZ4yHGwZ3bflP0pzUUzChKs/huzb/tO2kPLFSezD/IqYMrKGUgqRkEVyjSFnSWNmaCTgFlIAPYfjhvyNSpLJCSY2KnvioST2O51ZQ0mjpSaUVhRapMv38P+laUGpW8n3m2f73FFmWqkWXVHPSpFOKjVgTjvTxTRTJAxopBRVEiadd2Q8NXumzsLdpP9ISTdxI64YKc9PuAe/P48w1xLJw8jEYxjoPyrRmmSJWWQlflOCCBg4OCfbPX2/OsiXPnMFyOfTFZRspG025RuzX0WUJqtm5m8oLPGzPu2gKHGcn0xx+NdT4t1XRZjbi4vvNgTzUlithvc7kGCD04z34OT6EV59JkwtzyORVIM75AyTSqb6jpy00Ol126trbUB/ZPkgRxASJC+8dcnDEDPXsCOevasprpb+eKGSRhv+TcZd2DknGeAAc4HHHritDTfDl5eWLywzpGrrscN0Jxn+o5rDvLC80mZTOhRlfKuBlSe3PTseOvtWEZwbcUzWcZK0mNCI83lWoL4985qxfXb20VuPLBYYZlfIzgjg4wcH/Gqmnah/Z1wZhCkwZdrK/HcHj8utXrzxB50GyPT4FDj5t/z9+PTvzzmic5ppJXREYx1d9TJuLgPcSSIgVHJITqAOw9/rV+y1rylCM0in1Pz9vf6dKoGJppvm2oZCWXI2g5JHA6dc8D0ouLVIGBFwhOTle4wfb/AOtTbTBJobdSxyY8suzZ5Zup+p71Em9SHC8AZyVyP1p8MKtEWfIycLzjJq7cWieQjRXIAcKWLN8oyM4wOeM+/fFD00GlzalAvuxuJ6mpbe3WeXYsmMZIBBJOPpmtqDQbq2gZ7iFTBPGpt7jdlH54KkYIJAJxwR3ArHjutlzG6ruEb5Bfqw6YOD3HWqsyE1fUlilnikFnM7iAupeFTtV8dCQOp9+TUUvF2piAjLnoSFUc46njHv04qKa4M7IWRFZVCkoMFuc5PqeaS2ikuLhIScbQeSD8o5J/rS21Y9/dSL9ze3cDqshkjdMECQHJPr7jOeOnFV7m8FxMDDGwLLtIJ3EnPY4z6dau3GpzXRaDUbZXMPLNHhSATjODkHqOgH86yQ0azCSESBEbI3HBPPt0p819wiuRWRJFvWaKF2wqy5HIGCcAnJ4HQdfStKSQTQmW3ZvlOOSB+Y/rn8B1qpfvEZAYyCSuSUb7xz6Ecev5dDTczWdqSjYW4QbuOR9D9CR9CQetCk7diXCLd2r2NKJGmtmmQZCYyMevQD39qhiuAzEEY9Kr2zPJa4SQK6kgL3YHH/16mjNnczyPbhrbOSI3JZV9AG/xrT22upz+w0LsF1LCcxsR7dq1bXVVf5Z12/7Q5FYMgeBwsgwTyD2I9qcsgAyTitrRlqjD34aHXxyo6hkYEHuKK5G2unhBZJWJBB4orO/mbcz7GzcpHCxW8lRjzw38Q78d6yv3Z5hUrH/CG6gVf8S6dPp181vcTSzNH8oeQMSy8lW3Hg5GemOVbrjJy7ZgVYHsamDs9DpqXa1Jd4TknAFOa1ktJd5jVvOJEJTlXGf4fUcjH1FLbsyS+ZEWWSJWlQr2KqWH4cf/AKqi0zUri/1GwguCnl28qxxhRjAyuc/kKVbXQ0wjSlqrmg+qaroCPZpOHSdBKjHLeXnjjPA6dOR0984F5qF1eMxuriSQk5wTwPoOldrrFiNQti32iG3VGMLSTMQnJAzkA8hgBzwOfrVSfw3osG+3S/lu5gqsJrcrsYMencA49WBxkgHgNkoxWthuTkchE4jyQAwK7WBHUf5xVm1slu4pHDhAj/NuGFUH7oznPPPY4wDnrXR2uk6YLUPCPOWRCN7E5wf5EdMj0rAuo0Se5tbaRVt1Idi3qoPHH1P5UlJNiasibWbCBSk8TtHGXCNuVm2r0A7noOmT09ql/wCEftnh3x3D72UYZcMp6cgen41U1G8e5hsozKkgjhH3VA2kYXkgcnaqj6Ae5NrR7yRbS48xo/Lt0LqCw3HBGQB16FiM9enY1NSE0rxZcZRb1RkX9tNaOIXHQcMM4Pfj/PaojdTCy+yOqiMyLIPkwQQCOvfr3rY1HT5rydL1Y98b/KED5xj3zjHfg45NZM7BrRd8LF1+7ICcYz0x6dfzqoyukTKNmdd4Z120GiLpl9uSNX273IMeS2Vz3XljyeOOtZmqWulXQf8AsQKzByXAOAAB2zxjj8z+WIgVNOZY5G8yVv3qkDG0HjHGc575FW9Ent7PUY5LqPzLYBlkXGSQVPT3/wA8dauzkrolNJ6mU4ddysuD6V1EGn3Ft4fjVjElw7mQ+Yo3x4xhe5PyhjzjGcetZN3ci/v2mnGEPyqucCNRwFHsKnuNcleCeIHe8jkeZtA2r328cE80Si+oru/ulATvJc+XOzMjHa4GM4yOh+uPyqeA288LQRI4YDO15AcADrkgADkn8+1W3tdIg0gSXN20uoSruVIBnZnn5iePb2znBrLmP2aGW2XZIsjI6yY5wAcfTO7ke1TbQpOzuVyP7pJB6Z4q08+bOO2eEBwd5lb7xGOAPbk/Xj05k0l7NbnGoEiBkIPBxnqM456jt/LNLfQ2Zlb+zZJZFz0ZePwPU+nIqrq5Fx62t/ZeZLZyEq6mJ2XhgDjgg8jOOCPQ+9Fg0ODZ3C+TKZCBck/6vpwR36Y56ZJqoGuA7W6yPGvOEycev4Vait/mKrl2wdrRgksf73uODxUa9Ryt0AN85G5JMfxqCM9+hA9abK/8IPWtR7G3gtQ08ixsMjcDgMe2R3OPT3qhvT7Dt+Rhnc/zYOew/wA+9aqVo2RjyXldjsiO5Hl/xrlQvv25oqtag+dkKpKDcQc4/SioZpE9S+JNir21teKsm5SUcgErt7Z9DknH1PPQHhI7aNNWubVJt8cbMFfbjeA2AcduOa9S8bwRzeGbhpVjZYSJMPwc9AVPYgkHvkZXvXnOifYLjxbp4lV4rd1WLLcl5THsJOM9ZM/n2q47aFtXHi0CwSKuVLKQX7gYIPP0NULTSptLutLvblkEd5MJFGeigr1P0au61DSEQyQMCqkEEexrkr2y1W8lsNIkaJvJLpC7ZU7cjBPGDwAcKSQAc81KlzB8LujV1TWdNuYWsY3juJHZVIIO3rnOeh6D8fxqvBZLIyRSvIYx90fwAemewy3+cVc0DwtCj+Zf2gaSLhCz5DN3OBxgcAZ5zuPpjHW9kF3dmxaFy08iLt5DKD8h7jkHg9wPaiStqODuuVbm7cW0ElpImERHVhuI2Jgk8Y984z7celchdEwKBCYVAHJDBmcnvjoPw4rqUsP7RtSYcq8kSiLzvnaQA8cA4zjLDnqemeDxdtbpNfJbKGCuXAK4yuNx/pUNXZSukytIeXbu3XAxTbWTEc4zyUPGOoIIP86v6rpTx7TaCV1ZSSpO5uCoxgD/AGhUFzpsmn2UZuEImkOSpPRR24PfOefSqbvoRa2ppF7iy06C4ublX82ImOHaoH3Rt5HJ6jt6gkdaxowBEcZBxjIpZpGlRMkvjCrk/dHtUUj4URr1PWmo2uE5c1jSFhNLZ/aVReeVGB9xeCeOeDjP51VmESy7ImXkZ4BwMDp/9f3rb8MXc08Z0qONCzDKMxPJLDII7/ezgdgaoXMsFvrsksUdvPFE20hEAjbAwcYJBHXB78HHapjzJlSUeVNMy3PAQcE8momwDj8TXTPpkmqyiYboohtCRhcDZgEY/DP6cdqxrzSbmGSVvs1wIlJ+cqSuB1OcDir9opicHHcpLzzWy2k2/wBigna8WPzFBJbkZ7gfQ1ikjbgHirPlyNtiRWkCg4xk/NgA4H5VNS+iRMUupCIXd2EIZwvPA7fSnxSywXByApXg7lGQenfvUtsrecsAVmDDJVc7mBHBOM8YOcDsK27bTWeVGlWSLZEFyG+Yk5z3x3PbvU77hsULW2ku5kDqQHILOCcqwzg49PlP4n8K3ILW3sLfPyRgAbnY4yfqf881PbwxwxqiDOxAm49SB0zVHWJ7SW18kyAvjzGBXlBg4+hP5ijYSTk7GXqOqG5d4oVxAOCxH3jnr7dP89sxgMHnr6CrulSR+YIJgxDkHAxz2xz9R+VSXdtbJMqQZww3lgTwG5Uflj86tXcrWBx929ypYsqyMp3gldqrGPmZj2/H+v4UVc0ywc6hAX2vGMsSrfdI/XqV/P0oqWtRJnvF3bRXdtJbzorxyDBDKCPY4PvzXmGr6XsSD7Pi3ltpGw0UQDg5ByXDdiBjjjk56V6m7hFLE9K47V0C3kgxhXO7APQ1SvuU2Lp91canp8n2yVnu0fK/KANuBwMdeQTz6+mMYusavJo5jne2WSMko4L7SD1GDz6N29KuWcjQTfLT9Zg+26fOIwxm2EoFODuHK8/UCjzE2cpqfiq/1S3ks7aJLaF1JYK2XKhSWBb0wD0A9Prm6PctDcSRAtsnTB2tjkHcD0OeR096bpt80OoR3MhTMUb44C7jtbGSOpJ7nmm6JbPc6hEq5wnzk/Tp+uKHqVHTU7GRFmslto53iTChHiO0gA9Afwx9Kw5IbKyaWaWRRLEwliw+0sQxBUAeuMHrjJrYjaSSzWEwoSGG12JAAHHTv+Pp2rIvNKcXm8qPLLKxCqMMRk+vqf096hPZl90aOm6lDcCNJiu+RQQV+62ccf7wzgj1+uKu3ljb3YWR4kYpkDdngEc9O/8A9esOS3jkLhhtMS4QjsGXaRjp0A/IUul61KriC+YHnHmE8qfRvwrNwa1RXMr2M3VtJgsYzIk5XjCREbiT9c/T/PFYm4Rk85eu6mtEuJyZiWjmQqpQDBQ4+UnGccZ69/pWPqy+T5On29vHJAeRG0b7twPY5H589/WnCo9iZU/tGDDcSwqpikeMjncrEZ4x2/H86fGxVN3PNOk0y4t41mnt544y2NzoQCecDJ+h/KpLZA9xErglC4BA6kZ5roTsrmVjV03xFLp7tbPFvtogSQPvdT39yR1zVS41G/1Oc7xiIocQoDgev17n86uTwJeXIji8tTsO+Tb2+XAJ79KgsAkBvxcllPlmGN41DEMRjPIxjDYJ44JxziuePK/eNmpXsU4Hhtpk2x7rhuQSvyqO49c/4/nbkhuPJ2JtMv38RAfKxI2ncvHGSQc9s+lWn0p3lgYQbQFAaQNynTPB78n/AArSEKR8RrgYC/gP/wBdNLW5MmkrIo2dn5MvmkIHK42qOBntk9QOgrQXIHNBQbs4rE1bXGtZjBahHIGGY84Pp+FWZbkOuapdRXP2eAtCoGd6nDNz1z26f5zWQtyTKzTFpA5HmEkksB75rcvRHdWOwEK7BW34xuHXJHv14rCuYGhu3gIZdjYIb1HWpjLmNpQ5NSSKYRXayBU4IIVhleD3HpTjMWuM5ALEk4GP0FVnyX47U6Hglz2rZPUx6HQaMAgmuG/iO0ErzgdcH6/yoqppEslyVtgu/ac4AzkZ6Y7+mPpRQknqzmqVXF2SPcp5mKDy2AORnPPHcVzGrfNLuzkitm5OA3J29euKyLxFOccD0q5RtE0i9TMUHrVxH3R479RWHc63YWlw0Mk4yp5wCce3FW7HUbW9ybWYOQMkdCPwrE2OH1C1Wy1We1ZjsR+q/MQp5HXGTg10ug2f2MSxmN9zNnc6FTgdue3Wo/FGlz3UsV1bIWKoVky4AUDkHn6n9Kn0fUEFpb28xGUVI96AlASPlUt03ED8SDihldDSZApyoCg8nAxk0ySPehB5BqZl3cjoaQcDmlcRgywSs8qgtv3AcD64JP0FZdlCuoSSIm4ylyNkShmxg5YksFxkAZz3+merktx53nKzD5dpA6H3PvWTfaOkxVrYi3KKy/u0A3AjBHGO2R75prQpu5T0/VRbKphhdrJ5RHEJOHPHtwOe/fHY80mra9MbhrSwhUNE5VpXG75h/dB7e5/IUtoAm2zlUDYQQBkA4OR/Ksy5xFdTKXV23FmYfnWfJFyuU2+UbcNNNHD5++achmLtkk5YgD9P1q3pdiZMzSBiCpEaq2CTjqT6Yz+NXLXYbdBIUYuvlmEffBClg2OuOo+vrnjU0qy3W8MgJjXywNqkjcM5Gf8A63Y1SlZWFJa3M6zikuLqWSDD5Kkk4Kkbs4PXHyk+9aqaeSs8dwQySbSGT5ehJAx2xmrdjZJZxkB2kZyCzN1OBirLKMVKWgpS10M+fOcD8qi7c1dKjcciqF7J5OduC2OBVIgq6jeCytJJTgtjCg927f59K4d2Z3LOSzMckk5JNbmtzmW1UMT/AKwcY9jWD0NUNHRaZ4iWzt1e5je9uUY7BNgqvfduOWzkDj0FQaK7X+uEXTbxdFzN238Fu3uAePSsTNamiy3dtNJNaYGY2RmI6Z5H45AqXonYdm2bGp+F8K8tk5DDkRnoenGT+P59q5mZZI0AKOoPcjGasLqF7HcLOLqYzKu3ezk8A5xz1Ge3Suq1Rbaez3xpAZrldg2srAnPJBHXB5OPSkm1oJ2WrK3gizBdrqQZC/N24A4H65P4UV0VrEtlpcUCfKWAJAJOBjjv6AD8DRVuxFOnzLmfU626cLkE4Pp+lcd4v1Gax0dmhykkzCMMDgpkEn9Bj8aKK3nsZw3POM5XAHWp7Ka5spUuIS8ZJIV8cH168Hr+tFFYnQemW8q3FvFMhysihh+I96pS6TZvNI/lBDIMHaB6EencHFFFQwvZ6F0JjGOR/KlZaKKBDDkcCmsuASB+FFFAGdfwIjrMMffUjA75AyPQ81l3WhR3K7I49kwYBpQcqVwDnBPXkfkaKKT0ZovhNi1sVS5N1M7yz42qZMfIOc7fTJJP4mr6KFACjAHHHaiihES3JgMjkc0EDFFFMkrkfORWNqW97wRxDcx9Ow9aKKipJxi2ioJOVmOubG2ubZYpYlK4+XjDDpyO4PArm9Q0CeEl7Q+dGOdp+8Ov5/8A1+lFFcFOtOL3OmUUzJSFzMISpEhbbtPBznGKu6bPJBNJblFBY4IkONpGeue/P4d6KK9J6qzMIuzuitKY2keRVcrjPzEdc/yrd8J20l3diaQ5jj4GT6dfpgED8faiiqtYym77nWyO09wFGfmOBxnA+lFFFQ9y5ycdEf/Z" + }, + { + "segment_id": 8, + "start_sec": 105.34, + "end_sec": 121.88, + "frames_in_segment": 69, + "reason_kept": "perceptual_hash", + "thumbnail_b64": "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" + } + ] +} \ No newline at end of file diff --git a/solution.py b/solution.py new file mode 100644 index 0000000..3c8e79c --- /dev/null +++ b/solution.py @@ -0,0 +1,177 @@ +import cv2 +import json +import base64 +import subprocess +import time +import numpy as np +import os +from pathlib import Path +from PIL import Image +from imagehash import phash + +# --------------------------------------------------------------------------- +# CONFIG +# --------------------------------------------------------------------------- +VIDEO_IN = Path("/Users/abhiveer/Downloads/Class_8_cctv_video_1.mov") +VIDEO_OUT = Path("compressed_output.mp4") +REPORT_HTML_OUT = Path("compression_report.html") +SEGMENTS_JSON_OUT = Path("segments_kept.json") + +PHASH_THRESHOLD = 3 # Hamming distance threshold for imagehash.phash +MOTION_KEEP_THRESH = 0.15 # Standard threshold for motion +CONTEXT_EVERY_SEC = 3 # Step 4: Force frame every 3s +OUTPUT_FPS = 12 # Step 5: Output framerate +OUTPUT_CRF = 28 + +# --------------------------------------------------------------------------- +# PERCEPTUAL HASH (Step 1) +# --------------------------------------------------------------------------- + +def compute_phash(frame: np.ndarray): + """Uses imagehash library as per your logic.""" + # Small grayscale for speed + gray_small = cv2.resize(cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY), (160, 90)) + return phash(Image.fromarray(gray_small)) + +def phash_similarity(h1, h2) -> float: + """Returns Hamming distance for direct comparison.""" + if h1 is None or h2 is None: return 999 + return h1 - h2 + +# --------------------------------------------------------------------------- +# FACE PRESENCE CHECK (Step 3) +# --------------------------------------------------------------------------- + +def has_face(frame: np.ndarray, cascade) -> bool: + """Detection on a small proxy for speed.""" + gray_small = cv2.resize(cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY), (160, 90)) + faces = cascade.detectMultiScale(gray_small, 1.2, 3) + return len(faces) > 0 + +# --------------------------------------------------------------------------- +# THUMBNAIL HELPER (For JSON Contract) +# --------------------------------------------------------------------------- + +def frame_to_b64_thumb(frame: np.ndarray) -> str: + h, w = frame.shape[:2] + thumb = cv2.resize(frame, (200, int(h * 200 / w))) + _, buf = cv2.imencode(".jpg", thumb, [cv2.IMWRITE_JPEG_QUALITY, 60]) + return base64.b64encode(buf).decode("utf-8") + +# --------------------------------------------------------------------------- +# VIDEO WRITING (Step 5 - Mac Accelerated) +# --------------------------------------------------------------------------- + +def write_frames_to_video(kept_frames: list, output_path: Path, fps: float, frame_size: tuple): + temp_raw = "temp_raw.mp4" + fourcc = cv2.VideoWriter_fourcc(*'mp4v') + out = cv2.VideoWriter(temp_raw, fourcc, 12, frame_size) + + for f in kept_frames: + out.write(f) + out.release() + + # Hardware Acceleration for Mac (The <60s secret) + subprocess.run([ + "ffmpeg", "-y", "-i", temp_raw, + "-vcodec", "h264_videotoolbox", + "-b:v", "2M", str(output_path) + ]) + if os.path.exists(temp_raw): os.remove(temp_raw) + +# --------------------------------------------------------------------------- +# MAIN PIPELINE +# --------------------------------------------------------------------------- + +if __name__ == "__main__": + t_start = time.time() + cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml') + + cap = cv2.VideoCapture(str(VIDEO_IN)) + if not cap.isOpened(): + print("❌ Could not open video."); exit() + + total_in = int(cap.get(cv2.CAP_PROP_FRAME_COUNT)) + fps_in = cap.get(cv2.CAP_PROP_FPS) or 25.0 + fw, fh = int(cap.get(3)), int(cap.get(4)) + orig_mb = VIDEO_IN.stat().st_size / 1_000_000 + + kept_frames, segments = [], [] + last_kept_hash, last_kept_t = None, -999.0 + cur_seg = None + disc_dup, disc_stat = 0, 0 + + print(f"🚀 Processing {total_in} frames (720p Optimized)...") + + frame_idx = 0 + while True: + ret, frame = cap.read() + if not ret: break + + # Speed Optimization: Process 1 out of every 2 frames + if frame_idx % 2 != 0: + frame_idx += 1 + continue + + ts = frame_idx / fps_in + curr_hash = compute_phash(frame) + + keep, reason = False, "" + + # 1. pHash Check + if last_kept_hash is None or phash_similarity(curr_hash, last_kept_hash) > PHASH_THRESHOLD: + keep, reason = True, "perceptual_hash" + + # 3. Face Check (If pHash didn't trigger) + if not keep and has_face(frame, cascade): + keep, reason = True, "face_detected" + + # 4. Context Check (Heartbeat every 3s) + if not keep and (ts - last_kept_t) >= CONTEXT_EVERY_SEC: + keep, reason = True, "scene_continuity" + + if keep: + kept_frames.append(frame.copy()) + last_kept_hash = curr_hash + last_kept_t = ts + + # Segment Tracking for JSON contract + if cur_seg is None or (ts - cur_seg["end_sec"]) > 2.0 or reason != cur_seg["reason_kept"]: + if cur_seg: segments.append(cur_seg) + cur_seg = { + "segment_id": len(segments) + 1, "start_sec": round(ts, 2), "end_sec": round(ts, 2), + "frames_in_segment": 1, "reason_kept": reason, + "thumbnail_b64": frame_to_b64_thumb(frame) + } + else: + cur_seg["end_sec"] = round(ts, 2) + cur_seg["frames_in_segment"] += 1 + + frame_idx += 1 + + if cur_seg: segments.append(cur_seg) + cap.release() + + print("📦 Encoding video...") + write_frames_to_video(kept_frames, VIDEO_OUT, OUTPUT_FPS, (fw, fh)) + + # Deliverables + proc_time = time.time() - t_start + comp_mb = VIDEO_OUT.stat().st_size / 1_000_000 + + stats = { + "original_size_mb": round(orig_mb, 2), + "compressed_size_mb": round(comp_mb, 2), + "reduction_pct": round((1 - comp_mb/orig_mb)*100, 1), + "processing_time_sec": round(proc_time, 2), + "segments": segments + } + + with open(SEGMENTS_JSON_OUT, 'w') as f: + json.dump(stats, f, indent=4) + + # HTML Report + html = f"Time: {proc_time:.2f}s
Reduction: {stats['reduction_pct']}%
" + with open(REPORT_HTML_OUT, "w") as f: f.write(html) + + print(f"✅ Done in {proc_time:.2f}s | Reduction: {stats['reduction_pct']}%") \ No newline at end of file diff --git a/video_compression.json b/video_compression.json deleted file mode 100644 index 460f499..0000000 --- a/video_compression.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "_readme": "Your segments_kept.json must match this structure exactly. The Sentio Mind pipeline reads this file to skip re-scanning the raw video. Do not add, remove, or rename any top-level key.", - - "source_video": "video_sample_1.mov", - "compressed_video": "compressed_output.mp4", - "original_size_mb": 0.0, - "compressed_size_mb": 0.0, - "reduction_pct": 0.0, - "original_duration_sec": 0.0, - "compressed_duration_sec": 0.0, - "original_fps": 0.0, - "output_fps": 12, - "frames_original": 0, - "frames_kept": 0, - "processing_time_sec": 0.0, - - "segments": [ - { - "segment_id": 1, - "start_sec": 0.0, - "end_sec": 0.0, - "frames_in_segment": 0, - "reason_kept": "face_detected", - "_note_reason": "one of: face_detected / motion_above_threshold / context_frame / face_and_motion", - "face_count_in_segment": 0, - "motion_score_avg": 0.0, - "thumbnail_b64": "BASE64_JPEG_OF_FIRST_FRAME_IN_SEGMENT" - }, - { - "segment_id": 2, - "start_sec": 0.0, - "end_sec": 0.0, - "frames_in_segment": 0, - "reason_kept": "context_frame", - "face_count_in_segment": 0, - "motion_score_avg": 0.0, - "thumbnail_b64": "BASE64_JPEG_OF_FIRST_FRAME_IN_SEGMENT" - } - ], - - "frames_discarded_reasons": { - "near_duplicate_phash": 0, - "low_motion_no_face": 0, - "total_discarded": 0 - } -} diff --git a/video_compression.py b/video_compression.py deleted file mode 100644 index 58513c2..0000000 --- a/video_compression.py +++ /dev/null @@ -1,290 +0,0 @@ -""" -video_compression.py -Sentio Mind · Project 2 · Smart Behavioral Video Compression - -Copy this file to solution.py and fill in every TODO block. -Do not rename any function. -Run: python solution.py -Requires ffmpeg installed on your system: sudo apt install ffmpeg -""" - -import cv2 -import json -import base64 -import subprocess -import time -import numpy as np -from pathlib import Path - -# --------------------------------------------------------------------------- -# CONFIG -# --------------------------------------------------------------------------- -VIDEO_IN = Path("video_sample_1.mov") -VIDEO_OUT = Path("compressed_output.mp4") -REPORT_HTML_OUT = Path("compression_report.html") -SEGMENTS_JSON_OUT = Path("segments_kept.json") - -PHASH_THRESHOLD = 0.95 # similarity above this = near-duplicate, discard -MOTION_KEEP_THRESH = 0.15 # keep frame if motion exceeds this (no face needed) -MOTION_DISCARD_THRESH = 0.05 # definitely discard below this -CONTEXT_EVERY_SEC = 3 # force-keep one frame every this many seconds -OUTPUT_FPS = 12 # frame rate of the output video -OUTPUT_CRF = 28 # ffmpeg quality: lower = better quality + larger file - - -# --------------------------------------------------------------------------- -# PERCEPTUAL HASH -# --------------------------------------------------------------------------- - -def compute_phash(frame: np.ndarray) -> str: - """ - Compute a perceptual hash of the frame. - Steps: resize to 32×32 grayscale → DCT → threshold at mean → flatten to bit string. - Return a string of '0' and '1' characters, length 64. - - You can use the imagehash library (imagehash.phash) or implement manually. - TODO: implement - """ - # TODO - return "0" * 64 - - -def phash_similarity(h1: str, h2: str) -> float: - """ - Compare two hash strings. Return 1.0 if identical, 0.0 if completely different. - Formula: 1.0 - (hamming_distance / length) - TODO: implement - """ - if not h1 or not h2 or len(h1) != len(h2): - return 0.0 - # TODO - return 0.0 - - -# --------------------------------------------------------------------------- -# MOTION SCORE -# --------------------------------------------------------------------------- - -def compute_motion_score(prev_gray, curr_gray: np.ndarray) -> float: - """ - Dense optical flow between two grayscale frames. Return mean magnitude, ~0.0-1.0. - If prev_gray is None, return 0.0. - TODO: cv2.calcOpticalFlowFarneback - Params: pyr_scale=0.5, levels=3, winsize=15, iterations=3, poly_n=5, poly_sigma=1.2 - """ - if prev_gray is None: - return 0.0 - # TODO - return 0.0 - - -# --------------------------------------------------------------------------- -# FACE PRESENCE CHECK -# --------------------------------------------------------------------------- - -def has_face(frame: np.ndarray, cascade) -> bool: - """ - True if at least one face detected. Use the Haar cascade passed in. - Equalise histogram on grayscale first for better CCTV detection. - TODO: cascade.detectMultiScale — scaleFactor=1.1, minNeighbors=3, minSize=(20,20) - """ - # TODO - return False - - -# --------------------------------------------------------------------------- -# FRAME KEEP DECISION -# --------------------------------------------------------------------------- - -def should_keep_frame(frame: np.ndarray, - prev_frame, - prev_kept_hash: str, - last_kept_time_sec: float, - current_time_sec: float, - cascade) -> tuple: - """ - Apply the 5-step decision algorithm from README in order. - Return: (keep: bool, reason: str, motion_score: float, face_found: bool) - - Reason strings (use exactly these): - 'face_detected', 'motion_above_threshold', 'context_frame', - 'face_and_motion', 'discarded_duplicate', 'discarded_static' - - TODO: implement - """ - # TODO - return False, "discarded_static", 0.0, False - - -# --------------------------------------------------------------------------- -# THUMBNAIL HELPER -# --------------------------------------------------------------------------- - -def frame_to_b64_thumb(frame: np.ndarray, width: int = 200) -> str: - """Resize frame keeping aspect ratio, encode as base64 JPEG.""" - h, w = frame.shape[:2] - nh = int(h * width / w) - thumb = cv2.resize(frame, (width, nh), interpolation=cv2.INTER_AREA) - _, buf = cv2.imencode(".jpg", thumb, [cv2.IMWRITE_JPEG_QUALITY, 72]) - return base64.b64encode(buf).decode("utf-8") - - -# --------------------------------------------------------------------------- -# VIDEO WRITING -# --------------------------------------------------------------------------- - -def write_frames_to_video(kept_frames: list, output_path: Path, - fps: float, frame_size: tuple): - """ - Write kept_frames to a temporary file, then re-encode with ffmpeg to H.264 MP4. - - Steps: - 1. Write to temp_raw.avi using cv2.VideoWriter (mp4v codec) - 2. Call ffmpeg: ffmpeg -y -i temp_raw.avi -vcodec libx264 -crf CRF -preset fast out.mp4 - 3. Delete temp_raw.avi - - TODO: implement - """ - # TODO - pass - - -# --------------------------------------------------------------------------- -# HTML REPORT -# --------------------------------------------------------------------------- - -def generate_compression_report(segments: list, stats: dict, output_path: Path): - """ - Write a self-contained HTML file showing: - - Original vs compressed size (MB and % reduction) - - Original vs compressed duration (seconds) - - Processing time - - Storyboard grid: one thumbnail per segment - - Frames kept vs discarded count - - No CDN. Inline CSS only. Must work offline. - TODO: implement - """ - # TODO - pass - - -# --------------------------------------------------------------------------- -# MAIN -# --------------------------------------------------------------------------- - -if __name__ == "__main__": - t_start = time.time() - - cascade = cv2.CascadeClassifier( - cv2.data.haarcascades + "haarcascade_frontalface_default.xml" - ) - - cap = cv2.VideoCapture(str(VIDEO_IN)) - total = int(cap.get(cv2.CAP_PROP_FRAME_COUNT)) - fps_in = cap.get(cv2.CAP_PROP_FPS) or 25.0 - fw = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) - fh = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) - duration = total / fps_in - orig_mb = VIDEO_IN.stat().st_size / 1_000_000 - - print(f"Input: {VIDEO_IN} | {total} frames | {duration:.1f}s | {orig_mb:.1f} MB") - - kept_frames = [] - segments = [] - prev_frame = None - prev_gray = None - prev_hash = "" - last_kept_t = -999.0 - cur_seg = None - disc_dup = 0 - disc_stat = 0 - - frame_idx = 0 - while True: - ret, frame = cap.read() - if not ret: - break - ts = frame_idx / fps_in - - keep, reason, motion, face = should_keep_frame( - frame, prev_frame, prev_hash, last_kept_t, ts, cascade - ) - - if keep: - kept_frames.append(frame.copy()) - prev_hash = compute_phash(frame) - last_kept_t = ts - - if cur_seg is None or (ts - cur_seg["end_sec"]) > 2.5: - if cur_seg: - segments.append(cur_seg) - cur_seg = { - "segment_id": len(segments) + 1, - "start_sec": round(ts, 2), - "end_sec": round(ts, 2), - "frames_in_segment": 1, - "reason_kept": reason, - "face_count_in_segment": 1 if face else 0, - "motion_score_avg": round(motion, 3), - "thumbnail_b64": frame_to_b64_thumb(frame), - } - else: - cur_seg["end_sec"] = round(ts, 2) - cur_seg["frames_in_segment"] += 1 - cur_seg["face_count_in_segment"] += 1 if face else 0 - else: - if "duplicate" in reason: - disc_dup += 1 - else: - disc_stat += 1 - - prev_frame = frame - prev_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) - frame_idx += 1 - - if cur_seg: - segments.append(cur_seg) - cap.release() - - print(f"Kept {len(kept_frames)} / {total} frames across {len(segments)} segments") - print("Writing compressed video ...") - write_frames_to_video(kept_frames, VIDEO_OUT, OUTPUT_FPS, (fw, fh)) - - comp_mb = VIDEO_OUT.stat().st_size / 1_000_000 if VIDEO_OUT.exists() else 0.0 - t_end = time.time() - - stats = { - "source_video": str(VIDEO_IN), - "compressed_video": str(VIDEO_OUT), - "original_size_mb": round(orig_mb, 2), - "compressed_size_mb": round(comp_mb, 2), - "reduction_pct": round((1 - comp_mb / (orig_mb + 1e-9)) * 100, 1), - "original_duration_sec": round(duration, 2), - "compressed_duration_sec": round(len(kept_frames) / OUTPUT_FPS, 2), - "original_fps": round(fps_in, 2), - "output_fps": OUTPUT_FPS, - "frames_original": total, - "frames_kept": len(kept_frames), - "processing_time_sec": round(t_end - t_start, 2), - "segments": segments, - "frames_discarded_reasons": { - "near_duplicate_phash": disc_dup, - "low_motion_no_face": disc_stat, - "total_discarded": total - len(kept_frames), - }, - } - - with open(SEGMENTS_JSON_OUT, "w") as f: - json.dump(stats, f, indent=2) - - generate_compression_report(segments, stats, REPORT_HTML_OUT) - - print() - print("=" * 55) - print(f" Done in {stats['processing_time_sec']}s") - print(f" Size: {orig_mb:.1f} MB → {comp_mb:.1f} MB ({stats['reduction_pct']}% smaller)") - print(f" Duration: {duration:.1f}s → {stats['compressed_duration_sec']:.1f}s") - print(f" Report → {REPORT_HTML_OUT}") - print(f" JSON → {SEGMENTS_JSON_OUT}") - print("=" * 55)