mirror of
https://github.com/opencv/opencv.git
synced 2026-07-29 15:23:05 +04:00
Compare commits
1726 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 1f5fd865aa | |||
| 9a3dccab20 | |||
| ac6ca660f4 | |||
| 6f47c26acf | |||
| 945663bc9b | |||
| 0263b49298 | |||
| c2f59a0f73 | |||
| 9eda260495 | |||
| 3ed54b9008 | |||
| 6b954cd24e | |||
| 42ba5c7d16 | |||
| 72ddeea479 | |||
| 869dda4117 | |||
| 07de67c32f | |||
| c467d0d553 | |||
| 0906744788 | |||
| 67158b12cd | |||
| 9e50cf5375 | |||
| 4bf82e50d0 | |||
| 2e86d46cf2 | |||
| 707d10f115 | |||
| 83a4ad5f51 | |||
| e7b82a8561 | |||
| 546e68dc65 | |||
| b7c2a46830 | |||
| 719099ad6d | |||
| 2e9004813e | |||
| 50842b9036 | |||
| 3d6413cfc6 | |||
| 799622affd | |||
| 57ab0d4d17 | |||
| 02f8b85dd9 | |||
| 1fbdca0c9b | |||
| 9eaac6105f | |||
| 83ace8d580 | |||
| 851ce27240 | |||
| 70f8d807c8 | |||
| daa21a4385 | |||
| 13cef0cdfc | |||
| 083aced3b4 | |||
| 72ec9c159e | |||
| 5b00d9da49 | |||
| 74bb0beeb0 | |||
| 08714c510f | |||
| acfbed8654 | |||
| 6212084046 | |||
| d89b6226a3 | |||
| 11d1909e6b | |||
| 3c6fe75149 | |||
| ede4943d7e | |||
| 9d148c76ca | |||
| 21d8b588a2 | |||
| 5d66b1130b | |||
| 0550b2c1fe | |||
| d58d277707 | |||
| 95eed59f2d | |||
| 62bc647731 | |||
| 7f63776395 | |||
| b9792fdc14 | |||
| 0410fe6978 | |||
| 242e64c08d | |||
| cc94b393c5 | |||
| 58dd70e8dc | |||
| 53ff537f1c | |||
| a5814871d9 | |||
| 1aa03cecf1 | |||
| f10537cdd6 | |||
| 9d294cbcf5 | |||
| f1bec940b1 | |||
| dd93d48be4 | |||
| ad3123adfd | |||
| f939d80f4c | |||
| ee316758ca | |||
| 6d7a61cbdc | |||
| b44b1ab47b | |||
| 2e47a1a61b | |||
| 72685cf01c | |||
| 612888c066 | |||
| e7b55f4982 | |||
| 3004f5fa30 | |||
| 9682d2afff | |||
| 87d655325c | |||
| db25e44a17 | |||
| b7a9e672c5 | |||
| 8e49ab1d3b | |||
| 00c36e88ef | |||
| cde697dd14 | |||
| bb44316028 | |||
| 0b2cfcfda2 | |||
| 9c02caf392 | |||
| d87c30dc84 | |||
| 63d6cc5ca6 | |||
| 9682430a69 | |||
| b69ffe6376 | |||
| 1f72815637 | |||
| 90c3d7d361 | |||
| f4eebc46b2 | |||
| 2b1103c1d3 | |||
| 007a3ef8b6 | |||
| 83eb1d3608 | |||
| 5c12c92243 | |||
| 9e29762838 | |||
| da229cce9a | |||
| 36af97d00c | |||
| d705c651f2 | |||
| 08848c56b7 | |||
| ebe979090e | |||
| 901d4995e3 | |||
| aad95c7d8c | |||
| d9b7b300b4 | |||
| 044de4105e | |||
| 7a5aa06b9e | |||
| a21fb63c28 | |||
| eaa9b78121 | |||
| fd4df0f67d | |||
| 6decc2596d | |||
| 41b920344d | |||
| 82668e06d4 | |||
| a81374c1d7 | |||
| 66fc6126d2 | |||
| 8b58b59df4 | |||
| f0595b8254 | |||
| 1e01441767 | |||
| c797746b6e | |||
| 1bf4427a5c | |||
| ac3ec0d96d | |||
| 5c6c537044 | |||
| f8c82fc214 | |||
| 40b762bceb | |||
| 89e3c508d8 | |||
| cbdddb473c | |||
| b4c2891ef3 | |||
| 1325213303 | |||
| fb15bdfb21 | |||
| 9d2d173485 | |||
| 26e3bcb9de | |||
| 960dee8ab8 | |||
| 847976de4e | |||
| ceec0eb33a | |||
| 4840c4ae6f | |||
| 02e29fc99c | |||
| 7ce116695d | |||
| c879b1ab09 | |||
| de8d8720a2 | |||
| a855d230ec | |||
| 6a6619ec1e | |||
| 8c2bde2af4 | |||
| d22516872c | |||
| 17608f7ade | |||
| 81ebe28c24 | |||
| f7792f0be2 | |||
| 27302c367c | |||
| a153948a19 | |||
| 4273534c92 | |||
| 7274e2ff1a | |||
| 0e8bfff386 | |||
| 8c55d7be5e | |||
| f6de017171 | |||
| cc63452f65 | |||
| eeae81e903 | |||
| e30139edc3 | |||
| f01b2413c3 | |||
| 772fcf4088 | |||
| b8c00854fe | |||
| ba0a8dc723 | |||
| 100c2dd91c | |||
| 58c9135626 | |||
| 6e121b2e29 | |||
| e6619cf580 | |||
| 122b9f8e17 | |||
| d948b2a235 | |||
| ebd7d08408 | |||
| 140051b18c | |||
| b7276359e9 | |||
| 83d6d70a56 | |||
| a9d4e05346 | |||
| e5e6367223 | |||
| 5678ba1227 | |||
| b01f067614 | |||
| 65b0ecfec5 | |||
| d1902a1276 | |||
| 56cae1b293 | |||
| 7c740b6a31 | |||
| d430664791 | |||
| d057828ee3 | |||
| c9bb18b9f7 | |||
| 297e2b6f1a | |||
| 3853a18e0e | |||
| 226b4e3ed5 | |||
| 756c1a22d9 | |||
| a7bf1d53d8 | |||
| 7711cd284b | |||
| 8755ffbf31 | |||
| 69344f175b | |||
| d14a1de947 | |||
| 514b3b520c | |||
| 4a6b1805e0 | |||
| 4ab525c880 | |||
| 7d665a4754 | |||
| f7d52c774e | |||
| 8efdfd9dfc | |||
| cd42e38013 | |||
| 339e6aa782 | |||
| 309eb3c122 | |||
| 2594e5e384 | |||
| 3a7ea37090 | |||
| 9f0cd9ee10 | |||
| 13694c8ae8 | |||
| dde7c22fad | |||
| 29e7eb7719 | |||
| 3419c704a9 | |||
| cdbb661eab | |||
| afdf319f36 | |||
| 488babf3b3 | |||
| 2c57717ca2 | |||
| e9b4813bb2 | |||
| 9185b62a1d | |||
| ac8045b9c6 | |||
| 417f1e51a4 | |||
| b595812bd0 | |||
| 0172bd6beb | |||
| e02d6e2c8f | |||
| 7458dfc082 | |||
| bed8cb42be | |||
| c849492dfa | |||
| 4f5d30a865 | |||
| 2c0ef660bf | |||
| 21bbed7baf | |||
| 1e95c964f3 | |||
| 2c9547e314 | |||
| f73a97b53b | |||
| 387a0f26fb | |||
| c147ab1e85 | |||
| a5b293b412 | |||
| 7d4cbbd7aa | |||
| b7be49426d | |||
| 96d7bcc2a9 | |||
| 2d2ecbf3ee | |||
| e03136e951 | |||
| 1c6e9fdfae | |||
| d56dd0e091 | |||
| baabd95f30 | |||
| 877058aaed | |||
| 42b1c6440c | |||
| 35a89b1541 | |||
| 8ae6402799 | |||
| 720fd144ef | |||
| 0832b47d21 | |||
| dcc569ee5c | |||
| 0cbe2f2eab | |||
| 3df13ff564 | |||
| c2944dbc0c | |||
| c059f7ddcd | |||
| cf54e3b97e | |||
| 6d52ea8984 | |||
| b8c60234c3 | |||
| 2136c3f3c8 | |||
| a46166d30f | |||
| 85fd599939 | |||
| f3210b58a1 | |||
| d34a52042e | |||
| 99ae48f0b4 | |||
| 96e5300fdd | |||
| 4f621de849 | |||
| 3649a1a179 | |||
| 352485fc54 | |||
| c1e3ca170e | |||
| 9665e08bac | |||
| 65e4df751c | |||
| 4e8aac5308 | |||
| a649aea82a | |||
| 4fcfcfd002 | |||
| 4ce31c7c1a | |||
| 49bc100e51 | |||
| f5a14e5594 | |||
| dc21a0a6b5 | |||
| d218f28070 | |||
| e8a7394009 | |||
| 6a3a6416d7 | |||
| 9e3a826263 | |||
| 8714219dab | |||
| 6c4b3c1efe | |||
| 49fe496914 | |||
| 77578d415f | |||
| ff4c42d182 | |||
| 3d46c1f960 | |||
| 0387f8ad56 | |||
| 9a62173a5b | |||
| 682fdcfc9b | |||
| b9a6edfe3d | |||
| 606a646435 | |||
| 94d14c637f | |||
| cd1ca7b08b | |||
| 98f9a013d1 | |||
| c60fa84027 | |||
| 50eb661df8 | |||
| a87ccb9ac0 | |||
| 8e1b1a845b | |||
| 5253265342 | |||
| 2b303f38a8 | |||
| e6ac64008b | |||
| 7bb8c50080 | |||
| 8c68f1f626 | |||
| 98a157f589 | |||
| a1cc9380e5 | |||
| e938563de5 | |||
| 0ab4bbf771 | |||
| ab40630ff4 | |||
| 8548a8430e | |||
| 06b97b7b67 | |||
| cf852972d1 | |||
| 1f47c22371 | |||
| 602b034a03 | |||
| 8764b17ffc | |||
| ddc1b965b6 | |||
| be6b847675 | |||
| 9206ec30a2 | |||
| a7e9760316 | |||
| 7e1068919b | |||
| 30d46313ec | |||
| c1252a1089 | |||
| a86dc747b3 | |||
| c481e06e87 | |||
| 3bfe4f711d | |||
| 5245c7454c | |||
| 2fabe56bbe | |||
| 2ca39c910d | |||
| cf5a7b9679 | |||
| 9a6a046caf | |||
| c29c52a216 | |||
| 07c9a88d9c | |||
| f3439de480 | |||
| 28dd3aae79 | |||
| 0a5b200da2 | |||
| 9e9327e2f8 | |||
| 9fb0f5ac51 | |||
| 911be68a41 | |||
| 72d90ba8d2 | |||
| d277a1ba75 | |||
| 396f7e1a17 | |||
| 12a3eb776d | |||
| 6628714fc6 | |||
| 187befd665 | |||
| 1292fdf71a | |||
| 3425c90b66 | |||
| b0c5f49170 | |||
| 9cadc1e530 | |||
| c0d76ef984 | |||
| 72063bf136 | |||
| 36c1dce264 | |||
| 964d5a20e9 | |||
| 177478a8ad | |||
| a1c5740044 | |||
| 042ff210d5 | |||
| 091c7a3821 | |||
| c778011f14 | |||
| 4e9cb475da | |||
| e02418e904 | |||
| 840088e021 | |||
| e23ba9215d | |||
| ad71efb2cb | |||
| 8acd4c3ff4 | |||
| 0f263e125b | |||
| 82bd82e2f8 | |||
| c0a8d4e1ef | |||
| a5969aec96 | |||
| b01cdf28ca | |||
| ba84eb58f2 | |||
| d00f36ec75 | |||
| 7ec6d8a336 | |||
| c105b72945 | |||
| 1ed22204c8 | |||
| 034ff3ce13 | |||
| 1386489f41 | |||
| 08da247a87 | |||
| 63bc4d4b7f | |||
| cc024d3ef2 | |||
| 20d957d212 | |||
| 03df7831ab | |||
| 2425dac9a1 | |||
| 9071598a65 | |||
| 16ce114e0c | |||
| 183454a723 | |||
| ba612fc9bd | |||
| 91e21847e2 | |||
| 241991c677 | |||
| 4ef03ccbe1 | |||
| 73d1ea9a52 | |||
| db9a0cfbc0 | |||
| ff7ea605ef | |||
| 6cc5959356 | |||
| ce81433aff | |||
| 63c49be487 | |||
| 4f82b3588a | |||
| 3481c1caec | |||
| 35f96d6da7 | |||
| 2bda7aaf61 | |||
| 3212dd5465 | |||
| 7efc917ee0 | |||
| ec57a938c0 | |||
| c5b6c0456d | |||
| 1b73530b75 | |||
| 7512b5fdde | |||
| eeb997261d | |||
| 3dd1afe4ec | |||
| f151b1d277 | |||
| 047b1ca457 | |||
| 8ebd474c0e | |||
| 9086d6a230 | |||
| d9164bdd4c | |||
| 42b1bd56cc | |||
| eedde323ce | |||
| da6a38f9f6 | |||
| 92e08c9863 | |||
| 773e621190 | |||
| d2f19a3a0d | |||
| a3f05474c9 | |||
| 2d8673197c | |||
| d8ca61b01b | |||
| ec335b7398 | |||
| 7d8e5f623a | |||
| 2b8229f716 | |||
| b80a3a91a8 | |||
| 13d67b6ae7 | |||
| e05a0bc6c5 | |||
| 3da1144cef | |||
| b476bf2a00 | |||
| 23b28a6700 | |||
| eceada586b | |||
| a28cde9c3b | |||
| 529af7a90e | |||
| 8bf58937a9 | |||
| 7dce2d0b8f | |||
| 2e393ab833 | |||
| 0c3722be82 | |||
| 09fb7512ed | |||
| b59aaae2dc | |||
| d77088b19b | |||
| b5a6df4966 | |||
| 67e50b4415 | |||
| 0cf170587f | |||
| 0c2ccd3bae | |||
| 1692801fc5 | |||
| 84f33d0578 | |||
| 5c07e0b6d3 | |||
| e0827069c1 | |||
| 9b55c09999 | |||
| 6bb6039ebb | |||
| ba7c92b0e8 | |||
| 4f8a1213bd | |||
| edf54ac3a9 | |||
| f44c29ad7d | |||
| 0c57dc2e00 | |||
| 07bd58a0e8 | |||
| 7bff337828 | |||
| 24580e348a | |||
| cfdcf9f2d2 | |||
| 63ac69cadf | |||
| 263621aed8 | |||
| 40efd17be4 | |||
| 0f2b7fbc45 | |||
| 1ce31dcd62 | |||
| f55c1cc0fb | |||
| 81c0537b0c | |||
| 32f978ff4b | |||
| 8f3b876ee6 | |||
| 6b0cd392f0 | |||
| ea50be0529 | |||
| b11b08b478 | |||
| a5e89bf724 | |||
| 0d196529f7 | |||
| 77b57459c4 | |||
| 5dde172452 | |||
| d83372a8dc | |||
| 5a797ae7de | |||
| ff8e32453b | |||
| fb2012def2 | |||
| d7ba03a9cb | |||
| 1e744bf5b1 | |||
| 8364ea3954 | |||
| c24e6f7ae9 | |||
| ed2fb773cd | |||
| afb164cc15 | |||
| 474897ff01 | |||
| 29fb2b6e47 | |||
| af72e6b8f4 | |||
| 38bb0db9db | |||
| 2ad8c6dbd0 | |||
| 5c96021172 | |||
| 4b1bb702ce | |||
| a77a2f357c | |||
| 7e78b5d06e | |||
| 11c81067dc | |||
| 7018f94959 | |||
| 533fde66e3 | |||
| 5bd18155be | |||
| aa6b5ac124 | |||
| ca40a749b6 | |||
| d54d580f79 | |||
| 774d6c1d0a | |||
| 302d80d744 | |||
| 286c6b496d | |||
| 44da1f795f | |||
| 71c4e96e17 | |||
| 60fd5c2a3a | |||
| 8271c4e9c4 | |||
| 1f4fe3bb27 | |||
| a0431acb37 | |||
| e3f1d722e7 | |||
| 1c3c94fd2c | |||
| 45a1063c4a | |||
| 1cc80f10ba | |||
| a160158cb3 | |||
| 6a53cb9307 | |||
| 1920232268 | |||
| 7f4eb4f6c6 | |||
| de6edcc48a | |||
| e88a36621e | |||
| e9f7c4aeba | |||
| 467f5fc90f | |||
| ad018da224 | |||
| 90a1c6b1f0 | |||
| 93d1ceae43 | |||
| 073a7ff95a | |||
| 5bf1a4c08c | |||
| 562ff9d111 | |||
| 32f6e1a554 | |||
| 10bbcca11e | |||
| 19b3aab23f | |||
| df28bb5ccd | |||
| d4ec359f11 | |||
| 3603102c89 | |||
| a615102947 | |||
| 9c91d0103f | |||
| 37a1767286 | |||
| 03662c0589 | |||
| 7c354c14f7 | |||
| d2ba09e6ff | |||
| 934394c5e2 | |||
| 6c3cadbd73 | |||
| 4dda2002f6 | |||
| 539f8032dc | |||
| f8c5128729 | |||
| 150487feda | |||
| b767613d20 | |||
| 197b2e75e1 | |||
| 3516e14e05 | |||
| d82b918a7b | |||
| f60726b090 | |||
| 1675b23a64 | |||
| aa9da6e433 | |||
| 772f6208db | |||
| 0cf1de8eea | |||
| 5947519ff4 | |||
| 084835ec30 | |||
| a67484668e | |||
| 26fd37b27d | |||
| ccaedaedc8 | |||
| c5de129c36 | |||
| 533dd85299 | |||
| 48dc18ed59 | |||
| bac492fff6 | |||
| 1d2d579bd6 | |||
| 80687c8a56 | |||
| 8a1d3929cc | |||
| 281ce7a054 | |||
| 343f4b3026 | |||
| 882426a9b2 | |||
| cf15b9e8ad | |||
| f4f7522fe7 | |||
| 1b4e3ec35a | |||
| b9d5f3f6e9 | |||
| 587402859e | |||
| 0421da78b3 | |||
| b027a84fa1 | |||
| fbbf4e380f | |||
| faed8f43d6 | |||
| 9a15c7a899 | |||
| 35768ed638 | |||
| 161f50962d | |||
| e638b9e805 | |||
| d7737528d1 | |||
| 18c0511d3c | |||
| 06a1c90679 | |||
| e929dd4d98 | |||
| bdb82d181f | |||
| 10a2c51c52 | |||
| 4664a339ae | |||
| fb81e4df1c | |||
| 89833853fa | |||
| cb1e9adc63 | |||
| 562796e41b | |||
| bb93c53948 | |||
| 00575b346d | |||
| 25d125fba1 | |||
| 7316676c41 | |||
| d1229efeec | |||
| fd7a2defae | |||
| fcc481e751 | |||
| 1984aacb27 | |||
| eaaa2d27d5 | |||
| 77585bf8af | |||
| c821cb1489 | |||
| 86c1babd03 | |||
| 2205b2f5bc | |||
| 975e40f1c0 | |||
| 74d8527f8a | |||
| 57cf3d1766 | |||
| f81b3101e8 | |||
| 81aefed13a | |||
| 41040e589f | |||
| 6eb26c1519 | |||
| ad7a871708 | |||
| 634ffed488 | |||
| ebe36d6e7c | |||
| d68e62c968 | |||
| b027eac173 | |||
| 2ed24876af | |||
| b08a6ccd9d | |||
| d558260a8e | |||
| 023a42ba55 | |||
| 7409f21e9f | |||
| 62f27b28ed | |||
| 599f5ef51b | |||
| 86e12b6074 | |||
| 5dff283b39 | |||
| 341c3d5933 | |||
| 628b23acc8 | |||
| 988555a5d9 | |||
| e11333dd83 | |||
| af2434c547 | |||
| a4c883c098 | |||
| 0a531815c5 | |||
| a15db2d9cf | |||
| efc1c39315 | |||
| 3334b1437b | |||
| 34103ef1cb | |||
| e7f348e720 | |||
| da9be8231f | |||
| ed2cdb71e5 | |||
| bbe48eaac6 | |||
| bab826a381 | |||
| 77294855d7 | |||
| d8187f7518 | |||
| 9e83463128 | |||
| e98c9a7ce3 | |||
| 204651e0e2 | |||
| 042892f0d7 | |||
| 7cefaa49dd | |||
| fc41e8850b | |||
| 38b3698b97 | |||
| c2746b5d2a | |||
| daff2a0674 | |||
| ad5c2de97c | |||
| f8758da289 | |||
| ca9c52ac97 | |||
| 9c285da329 | |||
| de37cfc224 | |||
| 946c09f58c | |||
| 4e168ffdf3 | |||
| d7bbafd683 | |||
| e90c233551 | |||
| 06897dbdb5 | |||
| 39020fc9cf | |||
| d5489f3a68 | |||
| 5a5a487612 | |||
| 46775ad186 | |||
| 901d9b70b0 | |||
| 0b4e043442 | |||
| d0c3c4c373 | |||
| 6c5dc17a1e | |||
| cf3757448d | |||
| 8578f9c565 | |||
| c9c09262f7 | |||
| faac7f18c7 | |||
| b2790973a3 | |||
| 8d58b238ca | |||
| 51bd56f19d | |||
| b111fb94b7 | |||
| 544dd8b130 | |||
| 246a793d82 | |||
| e650d87e47 | |||
| feb74b125d | |||
| 3c0b0b0f94 | |||
| d31a0eab9e | |||
| ccbc764c02 | |||
| 60a5ada454 | |||
| d3c2b15f82 | |||
| b030d7e6a1 | |||
| 64d8cf1e2e | |||
| d262b04d99 | |||
| cce2d9927e | |||
| 79878a57a9 | |||
| 03fe86f0a3 | |||
| 13a0c14e6c | |||
| 6e022dcb06 | |||
| c38023f4e7 | |||
| cbb5fc0acc | |||
| 2df3abe16b | |||
| ecec53f509 | |||
| 023102c804 | |||
| 52c05e75cc | |||
| 3d48994a72 | |||
| 7b160fa3cb | |||
| 71d3654832 | |||
| 2c29ee9e00 | |||
| aafda43df1 | |||
| 39127d942e | |||
| b068e63618 | |||
| 4b8fb6c246 | |||
| 133d861d65 | |||
| 8539d424b2 | |||
| dcf96b2da7 | |||
| b1ac35e14a | |||
| 43e4946cca | |||
| 1b18ebf28a | |||
| f6cf68094f | |||
| d826bcdbbb | |||
| 070be56e14 | |||
| 939c60bcaa | |||
| 95550c2582 | |||
| ebb0255e19 | |||
| 5c8cd76893 | |||
| 3a8af7d691 | |||
| 7936faf9a3 | |||
| 5c85f816c9 | |||
| 56683e6d11 | |||
| fbac578c79 | |||
| ade46bd428 | |||
| 1138fbb940 | |||
| 436342d5f4 | |||
| b21b8ff9d7 | |||
| fb8fa3fdac | |||
| f45da9866a | |||
| 98421e5970 | |||
| 84bb77e914 | |||
| 6882970248 | |||
| 05e0b3b7e6 | |||
| 6a94862fef | |||
| cb69a5c29a | |||
| 75742fcd01 | |||
| c99ce0f427 | |||
| 660d7cd3ae | |||
| b6e25a9fc7 | |||
| 2b2ce3f6e9 | |||
| 3391caf434 | |||
| 3500c940d4 | |||
| 4d0848b3e8 | |||
| 1f4ddbe5b6 | |||
| 4ef311949b | |||
| 64344f4545 | |||
| 02b32d86d3 | |||
| fc610979bb | |||
| 11a09ef5cc | |||
| f08d88fa78 | |||
| 59c8edfd98 | |||
| 1a1cd9b4e9 | |||
| 7c44a07810 | |||
| cd3aa0184a | |||
| 1020a93fa3 | |||
| 9a5e9d3442 | |||
| 0ea572d772 | |||
| 2bacd8b702 | |||
| aa170cfb5b | |||
| e6f6905868 | |||
| 766600529b | |||
| 09f9b35bc6 | |||
| fea4396023 | |||
| ec99f96c62 | |||
| 2f8b5731da | |||
| 8d4a76925c | |||
| 00367cfb00 | |||
| e63d7de87c | |||
| 511ed4388e | |||
| 8a3b93773d | |||
| bcd63766ce | |||
| 7ea1bf3cf0 | |||
| 3678020c28 | |||
| 976da2f3d3 | |||
| 0d2fab86b4 | |||
| ca40d635e4 | |||
| 651b13f72a | |||
| bea46c90b5 | |||
| 0b4eb6a964 | |||
| 988b108858 | |||
| 44acfc38a1 | |||
| e30939f09b | |||
| 118b27f5b4 | |||
| eded87de5b | |||
| 12207ac763 | |||
| f77aa45cfb | |||
| 7fc764f5e5 | |||
| 06b335b2d7 | |||
| 62e0759ba2 | |||
| a46f119fdf | |||
| c9cb480844 | |||
| 746185652a | |||
| f16503743f | |||
| ea038436e6 | |||
| 6a93b43cae | |||
| 0ebde64701 | |||
| c30fef1f9d | |||
| 55bff44810 | |||
| 75a1743f35 | |||
| 83b7fe1b82 | |||
| 7e2f7f45d7 | |||
| 1f72873c55 | |||
| 7e56cfafbc | |||
| 6ecd553810 | |||
| 55a714c83b | |||
| 1d557e6702 | |||
| 10f89b9c8b | |||
| 4a24ecd176 | |||
| 2cf6cea90f | |||
| c607dadc49 | |||
| 83e2731c94 | |||
| 63e508abd2 | |||
| 006956c324 | |||
| ff2d76ec0d | |||
| bc7b21609a | |||
| f0547e5e05 | |||
| 67b562d543 | |||
| 6c118ebc51 | |||
| 09674623cf | |||
| ecfb1ab4f8 | |||
| a0a8fb4fd9 | |||
| 6c59e39f7c | |||
| e96de8821c | |||
| b382984810 | |||
| 2b4241c10b | |||
| e8376c789d | |||
| e4a9c0f184 | |||
| 5e47aa6300 | |||
| d67c9aabff | |||
| bb5a22c504 | |||
| a9c7db7518 | |||
| c74fed1fcf | |||
| 7c9caab1fb | |||
| aa76ef9a98 | |||
| 78f660024b | |||
| 19a2495067 | |||
| 77275031ab | |||
| 99475e2976 | |||
| 349ff631a5 | |||
| e50ef2dab5 | |||
| 942401de16 | |||
| 629461c836 | |||
| f9ff9c5618 | |||
| e2c7adc7c4 | |||
| 36afd4ef55 | |||
| 4c66614e07 | |||
| b1a28a52fa | |||
| 38db7a78df | |||
| 5efd2056f0 | |||
| 1f94b7dfc9 | |||
| ef01044b2f | |||
| 59cf62ad9e | |||
| 50b291995a | |||
| f0d4ccc6cf | |||
| c2341fd446 | |||
| 897d0a9aaf | |||
| c1aee0c312 | |||
| dfdb09386f | |||
| 6fb83f869c | |||
| e6aa8ce932 | |||
| f0f741b796 | |||
| 05ee15f108 | |||
| 5042ab1f32 | |||
| 35e1b322cb | |||
| 9c7e0bfd33 | |||
| 4fb5680d91 | |||
| cccdcac0c8 | |||
| f27a886314 | |||
| 3d25d70627 | |||
| 7ba4212529 | |||
| 6a5a0fe803 | |||
| df8e28283f | |||
| 4c2db3d6e7 | |||
| 8ab224746b | |||
| dae04aacc3 | |||
| b66adc81a4 | |||
| 211d44cfc5 | |||
| eb89f5207c | |||
| 29d1bce85f | |||
| 79eb3c5cde | |||
| befbe89bdf | |||
| eb45cf0c93 | |||
| 9b52b61451 | |||
| a01659825c | |||
| c098c18942 | |||
| b033a63e63 | |||
| cb8ddb1179 | |||
| 3f95818252 | |||
| 990295644e | |||
| 9eb0e7d99b | |||
| 267241b889 | |||
| 8271bd5f14 | |||
| 1cee868e88 | |||
| d822d6f101 | |||
| f8d922ad3e | |||
| 0c30b18769 | |||
| a8cb5c3983 | |||
| e23f7303a6 | |||
| 0d5ffec521 | |||
| 97eac3f394 | |||
| bb3c0c066c | |||
| 9b9769169f | |||
| 7df92bbb77 | |||
| eeed9ce247 | |||
| 1f4586f3dd | |||
| 6d368dc1e7 | |||
| 51530d4d8e | |||
| 8541b7bf92 | |||
| b852108262 | |||
| 3747d2643f | |||
| 7d82171af4 | |||
| e6e817e613 | |||
| 0469c18726 | |||
| f5fecc7e9a | |||
| 4382970739 | |||
| d17740ec87 | |||
| 91511c1521 | |||
| 2e3e106676 | |||
| a1798cb28e | |||
| 80df44bd75 | |||
| bb05af8ece | |||
| 73042b32e1 | |||
| a1d151924d | |||
| fa5705613d | |||
| a7f9677378 | |||
| c1acbb02bc | |||
| 63a746c6ea | |||
| 7e03a8b279 | |||
| 5effebb5f5 | |||
| 8af175b81b | |||
| 4d3f9228aa | |||
| ac19420907 | |||
| f8a100f3e0 | |||
| 04b1822cff | |||
| bcb0ee3e4b | |||
| 9aa6528fd7 | |||
| 7efb09fb8f | |||
| 60803afe8f | |||
| ae89787984 | |||
| cf3a2e30cd | |||
| 259b9e093c | |||
| 5421d741bc | |||
| c4a63f6a86 | |||
| 20b6191842 | |||
| 64d679ecb4 | |||
| 9dc51a1aa4 | |||
| 2d3aa3861c | |||
| 244f126ff6 | |||
| 3b65b710b6 | |||
| 0dba5bdc4a | |||
| 46d39aff68 | |||
| 6bf4a7ce01 | |||
| dc21e2cc0e | |||
| fe5eaae102 | |||
| 846266fde4 | |||
| 49efc250d3 | |||
| a66018d14d | |||
| b0ad84cfa2 | |||
| c9f51d5eed | |||
| 640e180efe | |||
| 034ef02409 | |||
| 9c7ba6db90 | |||
| 68c57a1e82 | |||
| 284b2fc1e7 | |||
| 17713f6831 | |||
| a1e5bd71f1 | |||
| 0a16d93e1d | |||
| b4e4f13f9e | |||
| 4d9698a4cf | |||
| bff92da970 | |||
| d76226e21b | |||
| bfb1ba371c | |||
| 0470bb0e29 | |||
| 16869225ff | |||
| 3940b6163b | |||
| 51cb6998ea | |||
| 0c02e5de25 | |||
| a489d86e5f | |||
| ae036838dd | |||
| 6b8de222d7 | |||
| 5f94a205d1 | |||
| 882971151d | |||
| 136e5eb804 | |||
| 24d8cbf940 | |||
| 80708008a4 | |||
| 5726e80f77 | |||
| f9484bae8a | |||
| 61c347fb76 | |||
| 357a856cf6 | |||
| 6f76e7b42d | |||
| adc15c2bba | |||
| 3ebfe60008 | |||
| 8e79de35a8 | |||
| a5afcd9f11 | |||
| a87607e3ef | |||
| 836635d2d5 | |||
| 4d7a593c25 | |||
| 1bb0c5747c | |||
| 0084dee05b | |||
| 1f8df38dba | |||
| 3eff05e3eb | |||
| 45969bb3ae | |||
| 0eaeff0641 | |||
| 229aa62300 | |||
| f351540eda | |||
| 806e9241a6 | |||
| b3e18d23a3 | |||
| f7a474180b | |||
| fde0185a77 | |||
| 22f42a639f | |||
| 4aa891e773 | |||
| 60ce2b2e9f | |||
| da70b04262 | |||
| 3c1917771b | |||
| b184d7f27b | |||
| ba4513503e | |||
| b5248dbf3f | |||
| fa3f29f2b5 | |||
| 099ea91823 | |||
| a600267b9f | |||
| 29deff8707 | |||
| af8aa8a2fa | |||
| fb7e74c511 | |||
| eedf86402d | |||
| 767b28f2e3 | |||
| fbc69e444b | |||
| c1c3139368 | |||
| 409bd162ff | |||
| e6f6707558 | |||
| 7dc22b4ea6 | |||
| a228633d31 | |||
| 1db1a83410 | |||
| 7dc549f166 | |||
| c78142acb0 | |||
| dbb7aa7856 | |||
| d695d4a0bf | |||
| e1a598c5b3 | |||
| 681a8c6e18 | |||
| ced8e7a813 | |||
| 2b0c3eb170 | |||
| 1cf75c0cab | |||
| 51421098dd | |||
| dc50dc7254 | |||
| 3e5890694e | |||
| f5330a44e8 | |||
| 31c8f2ec57 | |||
| 46d128e073 | |||
| aa5311ea9f | |||
| efafd4a9e5 | |||
| 7fd21d217a | |||
| ce42593fe6 | |||
| 7cbc4e88de | |||
| 4c1ed13846 | |||
| 8754adc021 | |||
| af9368d35f | |||
| c35dab9046 | |||
| 6f19ef8631 | |||
| 5cb2d1c20d | |||
| e460a29cab | |||
| da9bdf9c15 | |||
| 77df5948e7 | |||
| e35d98e566 | |||
| b7659c62f3 | |||
| 394c74b349 | |||
| e6420c523d | |||
| de6d13088f | |||
| 689589ebaa | |||
| 95d7ecb33f | |||
| 13182da945 | |||
| a0a4f6c23d | |||
| 224124b69e | |||
| 38ef8894b7 | |||
| 017a282c7a | |||
| 01527c44fd | |||
| a8eab26bae | |||
| 63235f51f0 | |||
| cc529d971b | |||
| 8236181c62 | |||
| 01a980aa9e | |||
| e8d26b02ac | |||
| 7358b44222 | |||
| 9a98cd6e65 | |||
| b6dafed5ba | |||
| 8cbb284b7b | |||
| 9fcb0b2201 | |||
| aad289a3a2 | |||
| 150e522bee | |||
| 510680a5df | |||
| 03bd82796d | |||
| 56754e907d | |||
| 1a5dfe421d | |||
| ed1aa73dd3 | |||
| cce225f6e9 | |||
| e2f5001b11 | |||
| 8b8c368148 | |||
| b4845d8c9f | |||
| d1606b4aa3 | |||
| e0d991cf46 | |||
| fa272c43c2 | |||
| a1de9e9ad5 | |||
| 1ce5165cb7 | |||
| 1454843b81 | |||
| b92a46c130 | |||
| ea51396731 | |||
| aa82f921cc | |||
| 2da7eae2c4 | |||
| ecbe843061 | |||
| b4a535272c | |||
| dbe7634286 | |||
| 25159d8e81 | |||
| b8d8b0568c | |||
| eb247d826f | |||
| 9e69e2a07a | |||
| 7da3e98dfd | |||
| 55b9c0374c | |||
| 91ab92c349 | |||
| 879c0196d4 | |||
| f40ffe4763 | |||
| 116311b7b4 | |||
| 5d43d3ca88 | |||
| e55679079f | |||
| 3994cfbc59 | |||
| d02c291160 | |||
| 8bbce0a2a2 | |||
| e55f2b2602 | |||
| 9aef26e2ad | |||
| 261546f6f6 | |||
| bb4199b177 | |||
| 281666887e | |||
| f1ef3a4865 | |||
| 9997aa8187 | |||
| f15b42018c | |||
| f9e9ae85bd | |||
| a49beb7c73 | |||
| 51dff5b9e8 | |||
| 826fc00374 | |||
| c10692deff | |||
| daa7b9ce5f | |||
| 1ab02631b0 | |||
| 3e755b2290 | |||
| f15a167df4 | |||
| f6367a2ea5 | |||
| 5f88e2b496 | |||
| 2c7cf52e3b | |||
| b7c5083a87 | |||
| d5d88efd5d | |||
| 6cb7a7be18 | |||
| cdea6b532f | |||
| d01e3529a6 | |||
| 7c13d3277c | |||
| 345b3b0bdd | |||
| a65d7d4dd3 | |||
| 5e986f3347 | |||
| 27a8bb471b | |||
| 7868733002 | |||
| 469aef2e5e | |||
| 5e00fc6afe | |||
| f1c062c30a | |||
| 5dc17f5d58 | |||
| 069dd8a068 | |||
| f8ccc115ef | |||
| 17fea0dd0a | |||
| 998aefd1d1 | |||
| 975a6299fa | |||
| eb8728d727 | |||
| 63dbe66b41 | |||
| 3cc27c769c | |||
| becbfa6281 | |||
| 8b44a42a40 | |||
| 5170f0b5da | |||
| dc2dbb4173 | |||
| 1d68a89947 | |||
| 79e4f7eb78 | |||
| cc73c7000f | |||
| 8bb26fa5de | |||
| 48612d7c58 | |||
| 8ba84f4b47 | |||
| 48f95d92ae | |||
| 5dbdadb769 | |||
| 5a8363a44e | |||
| d534d04f25 | |||
| bfc27271e2 | |||
| b86088b89c | |||
| c1b6bf21d5 | |||
| 3e1f74f2ca | |||
| b10d4b05ed | |||
| 5d099df578 | |||
| 3e4bb371c8 | |||
| b6ba1f226c | |||
| da44a2fac1 | |||
| bc653add74 | |||
| 34b02f6437 | |||
| 6ae4a9b09b | |||
| e91b818e3e | |||
| a078653ab4 | |||
| 530702c5f2 | |||
| feed2c074d | |||
| 65b4d77959 | |||
| 4ab891e9e5 | |||
| 435615ba2e | |||
| ccda4bf008 | |||
| 0cd0e4749b | |||
| 286fe261d0 | |||
| a098fb1803 | |||
| b8c6adc569 | |||
| cd1ffd169c | |||
| a1ad1f0800 | |||
| 214cbabc40 | |||
| a138e5a6a5 | |||
| d8f7377122 | |||
| ede5b23753 | |||
| 215f78eee2 | |||
| 4425dac7f4 | |||
| 4f79b9de48 | |||
| 397ac5e68f | |||
| 43c75c64b5 | |||
| c319625a07 | |||
| a7d0448faa | |||
| ca10e5e8ae | |||
| 32414afe72 | |||
| ed10f50d25 | |||
| 48d9be70d5 | |||
| 2bef73c968 | |||
| a518d7a1cb | |||
| 9ef8aeadd3 | |||
| e2db68f822 | |||
| 952027a853 | |||
| e91bf95d58 | |||
| dbce90692a | |||
| e630be3890 | |||
| 8401ed9395 | |||
| 7161b5bbad | |||
| 7e6293d9ec | |||
| b13d4bafa8 | |||
| 49731ad530 | |||
| 3d261e8a01 | |||
| 87935f3560 | |||
| 063d8b4211 | |||
| c6b31481b6 | |||
| d14e007fdb | |||
| 40f6f679b8 | |||
| 2b3013fd20 | |||
| c815043607 | |||
| e7e63fac6c | |||
| 0dad2876e2 | |||
| 514b714cc2 | |||
| 5ae9add102 | |||
| d45350a06a | |||
| 7fec87d3f6 | |||
| 3e59ddbace | |||
| d9dc5ffa91 | |||
| 7a0a9d010b | |||
| 51aa649499 | |||
| c41e8006c7 | |||
| eb9d7c4dd5 | |||
| 73389b2b9c | |||
| 00d555f051 | |||
| 6cf7d6ef4e | |||
| 452ea4c15f | |||
| 39201e68e2 | |||
| f332cba14b | |||
| 3dc2dbc17e | |||
| 3ebdcafdd3 | |||
| d093cb54d5 | |||
| 64fd54ffb4 | |||
| a348f3eeaa | |||
| 33f423de04 | |||
| d6ba52c3f9 | |||
| e9638d0997 | |||
| 5cb0084547 | |||
| 24caa80143 | |||
| 086792ec06 | |||
| 0a4a1d7526 | |||
| 078d49609e | |||
| dca5684145 | |||
| 9145985ff4 | |||
| 7ff9d7eb2d | |||
| 3715f71aaf | |||
| 167a26642e | |||
| a4b34e7ae1 | |||
| dda999545c | |||
| 7821fe2bde | |||
| b75cbfde45 | |||
| a548a08129 | |||
| 32bc89f094 | |||
| 33d42b740c | |||
| d847387694 | |||
| eabcfa5652 | |||
| 6cb90c0e97 | |||
| 130914d9f4 | |||
| 02ebc4368c | |||
| 64244e160b | |||
| 6bf599b1bc | |||
| 088535fa56 | |||
| 58afe5dd17 | |||
| 5f8d8c0069 | |||
| 4e4a7d0353 | |||
| ee97a5e757 | |||
| f02204847a | |||
| 8dbc96fed8 | |||
| 8ce691e679 | |||
| 2272a58769 | |||
| 2fde4d8a94 | |||
| 2443e8090e | |||
| 49dfa5a17f | |||
| 4c99196399 | |||
| 9628abc786 | |||
| 87e0c26129 | |||
| 5d2edced26 | |||
| a7821c60e5 | |||
| f197d8b91c | |||
| 890f1baff0 | |||
| 4d28e8243c | |||
| ae795e5797 | |||
| a13e32f5ab | |||
| d509165d96 | |||
| bf4994554d | |||
| 7acea48788 | |||
| 58882e5c22 | |||
| 6b9ebcbf3d | |||
| 601b7d1dd3 | |||
| 2ae20c74a2 | |||
| 3f458c6eb1 | |||
| d3e24f3cbf | |||
| e21c6e19db | |||
| 5327482b46 | |||
| 4f9c081dc3 | |||
| 157202fc8d | |||
| b036fc756a | |||
| 4ce684e61c | |||
| 795c108f2b | |||
| 6811d2ab24 | |||
| 5db1754d49 | |||
| 09d25e11c6 | |||
| a0c98dcefa | |||
| 44970ddf56 | |||
| 05b9c991dd | |||
| 46be47cb4b | |||
| 4eb9b9d6cf | |||
| 53494ba397 | |||
| 15678efe84 | |||
| 8399568edf | |||
| 0566ab4d3d | |||
| df63060e4d | |||
| 4175916b2a | |||
| d649f47eeb | |||
| d014cb8fb4 | |||
| c45492371a | |||
| 719149877e | |||
| ee36717db4 | |||
| c48777a1c3 | |||
| 0ccc903647 | |||
| 9cb48606ba | |||
| 8e93c19de3 | |||
| 41fd711ab0 | |||
| e85bacff7b | |||
| 4b885e2067 | |||
| 4f6f6e8cac | |||
| 6ef0253fb7 | |||
| f7b5e6544f | |||
| 648facccd6 | |||
| 709e8e8e07 | |||
| 734bf8babd | |||
| 4880858119 | |||
| cea9a97434 | |||
| b3eee49451 | |||
| 60906d9175 | |||
| d6a88397b4 | |||
| 8fe79738ce | |||
| 86aabf704f | |||
| f9aa148ba9 | |||
| 358e59e91b | |||
| b94963d381 | |||
| e79c875fe2 | |||
| 24be7b26cd | |||
| 0206f419c1 | |||
| 1e038e2837 | |||
| 4aa9f83100 | |||
| 1acc1085d2 | |||
| 83fe2f3b16 | |||
| 1e27b07e29 | |||
| 4293a54447 | |||
| edce617a58 | |||
| 51d3138dff | |||
| 83cdd43a4c | |||
| 58e7d9f32f | |||
| f22d9a232d | |||
| 4ec1930949 | |||
| bc72f4d2a2 | |||
| 08d8faf9da | |||
| f9268d34dc | |||
| 6e22be4100 | |||
| ce07840e9f | |||
| 6b7d890f34 | |||
| 9941c6710d | |||
| e8dd31aacd | |||
| d6a7e8f84f | |||
| b633c73c46 | |||
| 529bd41751 | |||
| d3ac1bc314 | |||
| 27c1bd2762 | |||
| 069f3d8d9a | |||
| 2509fa8080 | |||
| 5a5c82bb1d | |||
| 26f5d2d639 | |||
| b674cd8571 | |||
| 8c91a1af71 | |||
| 037ffcdf99 | |||
| 22a3cf0fba | |||
| 0cea828a10 | |||
| bc741ab25f | |||
| 64c94cb22c | |||
| d449ba104a | |||
| 6da7c50fb5 | |||
| 442082eb0f | |||
| 92fc763925 | |||
| 0d19685f95 | |||
| fa749de0dc | |||
| 5aeeaa6fce | |||
| 45e0e5f8e9 | |||
| 459e7d4a80 | |||
| 400fea8626 | |||
| a9687a341e | |||
| ae9d24d433 | |||
| 8c60498673 | |||
| 1ae71fe205 | |||
| be530bd085 | |||
| 80d0593dbd | |||
| 66145ea06c | |||
| dd71bef6f5 | |||
| e719bee2b8 | |||
| 63ae0eeba5 | |||
| 34c630faf4 | |||
| 3a6d248bee | |||
| ea0c9b7f5c | |||
| cc08e00876 | |||
| fffac2f085 | |||
| dfe7c98090 | |||
| f3ee1c3d2f | |||
| 917b883cf0 | |||
| a63576e76d | |||
| de431609db | |||
| 5d5527d03e | |||
| 4088013251 | |||
| 88a883e68e | |||
| 8660e048bc | |||
| d4087f19a2 | |||
| 12c25b9310 | |||
| e88253ccad | |||
| f44de302a0 | |||
| b7c97f6e30 | |||
| e8d2a9752b | |||
| 10849d1c7a | |||
| 17ca7f9545 | |||
| 658282fcbe | |||
| ee270d1a18 | |||
| 740b1f235e | |||
| a118577a57 | |||
| ce503c64bf | |||
| 00a180185e | |||
| 1c639befe6 | |||
| b1899e5489 | |||
| 6f292d8036 | |||
| f07e9e7c5f | |||
| 2784fd7b27 | |||
| c289c8a700 | |||
| 13c058ecf8 | |||
| df0c43321d | |||
| 8f10ca5180 | |||
| 9f04222a75 | |||
| 060e58d080 | |||
| b5936648ca | |||
| f2cf9dd8bf | |||
| 7069b4b761 | |||
| 0e3553130a | |||
| c34fc180a7 | |||
| 77d04a2622 | |||
| 1d01c49a06 | |||
| def17f2baa | |||
| 72cfff4c59 | |||
| 45dd18955f | |||
| b0b199ee8a | |||
| 894724eaf0 | |||
| 7a78559708 | |||
| 3bc952ed34 | |||
| 9dea590ada | |||
| 3dcddad88a | |||
| 39754bd6f9 | |||
| 0a1ff0d42d | |||
| e38ba1999b | |||
| 6ce03b0484 | |||
| 2153453fd1 | |||
| eb7ff99f80 | |||
| 098d4e6174 | |||
| 632b21e090 | |||
| 2cf16db683 | |||
| 00300baa53 | |||
| d8a4d3a2eb | |||
| 3e1586a1c6 | |||
| fa2cd93ecf | |||
| 7b551af424 | |||
| 11c7053b0f | |||
| 8752414718 | |||
| 3509018bd6 | |||
| 1966e7cea9 | |||
| 2b31055914 | |||
| b5dbe9e04b | |||
| c962a9d61c | |||
| adb2040980 | |||
| 14ee306b9e | |||
| df136339ff | |||
| bd9d3dd561 | |||
| 9ce9fc3361 | |||
| 3ff1620086 | |||
| 8db6d9f9b2 | |||
| 368bac7af6 | |||
| 19ceab13f2 | |||
| 790f53f12a | |||
| f7f194e5dd | |||
| eab7603096 | |||
| 838961a289 | |||
| fb568755a1 | |||
| 0bbd768d9d | |||
| f20af817d4 | |||
| 34a390fbc2 | |||
| 059bf1d9e5 | |||
| 773616ee04 | |||
| 429ab8ebee | |||
| d39e73365c | |||
| f8801cfdb8 | |||
| fc1d38ced8 | |||
| a13db7c8fa | |||
| 6b09345232 | |||
| 41154b30de | |||
| 5ac8444c22 | |||
| 70c1b700d9 | |||
| 19b88a17bf | |||
| 81acc5e73e | |||
| 26cb0ce1d5 | |||
| 20641b4a0b | |||
| 51663f5612 | |||
| 95ebdf4069 | |||
| 2cfd635e9e | |||
| 7537521f53 | |||
| 7c43daccba | |||
| 38904c9a11 | |||
| 094d7c4926 | |||
| 37a754621a | |||
| bef34093aa | |||
| d5ead208b7 | |||
| 935f973575 | |||
| 7539156109 | |||
| a4239f972b | |||
| 10aec14a4d | |||
| 1253c2101b | |||
| 8fe4ab280b | |||
| dda3b534ad | |||
| 1c025be068 | |||
| 514f1fae95 | |||
| 8a2de2ecca | |||
| d45ce086c1 | |||
| 3b4f65b186 | |||
| 6f892b10ff | |||
| 16a11cfb27 | |||
| 1b0297d92b | |||
| 75fba08042 | |||
| 4c5593b633 | |||
| 06f6f74e61 | |||
| 59aa516ca5 | |||
| 0537747f79 | |||
| ddc9be9170 | |||
| fbc91c5ee9 | |||
| 901dc3b878 | |||
| e59912f803 | |||
| a19cc6cb64 | |||
| 514e97223c | |||
| d650efc069 | |||
| 96a4a7b339 | |||
| bd314bf955 | |||
| 2427c03625 | |||
| 7a8bd31657 | |||
| fd759223fa | |||
| 923698d700 | |||
| 8a4f35704a | |||
| 2509b7954e | |||
| d764af5318 | |||
| 6b23cb5b02 | |||
| b8f5fcf3f9 | |||
| 623a02c69f | |||
| c1541c9e79 | |||
| 70a4de20d7 | |||
| 9631cb6de9 | |||
| f6283432ff | |||
| 8ac3ddf421 | |||
| 60b59eeb73 | |||
| cf00349b5b | |||
| b8283edfca | |||
| b197ec9413 | |||
| 78e16a906b | |||
| 4037a4f227 | |||
| e69d2c1bb1 | |||
| 5c77784ac9 | |||
| 0a90a36a1f | |||
| c47190ef90 | |||
| 198cd1a40d | |||
| 4746a710bb | |||
| 3e55d705cc | |||
| 56f791679b | |||
| 68d1110cde | |||
| e08b075db0 | |||
| 66221a32b9 | |||
| c0456df611 | |||
| 85f92fabbd | |||
| 239704f986 | |||
| 7973594a01 | |||
| f70d63e4c9 | |||
| 26d3a1a036 | |||
| 04d293d2c4 | |||
| cdf4e4e0b5 | |||
| e3f450cffb | |||
| 8b99a1e850 | |||
| 7703b63cae | |||
| 4fd1960425 | |||
| 3f927abb4d | |||
| 83cefcb92a | |||
| 327d9f274b | |||
| 0e1717c14c | |||
| f5ded41016 | |||
| 2b106db02f | |||
| 13bb236ad5 | |||
| 8f6f9c3e58 | |||
| 0a698bf145 | |||
| cc237b7aba | |||
| f95ff0a352 | |||
| 4e2ec7b97d | |||
| 2e79dde357 | |||
| cebf109d39 | |||
| 428fb72625 | |||
| 3b7acf2657 | |||
| 01f8645bc8 | |||
| be88b20154 | |||
| 84da6ca265 | |||
| 19b3064706 | |||
| 8e944cfe70 | |||
| fe76b2116a | |||
| b8de81749c | |||
| 1b7c5b201d | |||
| 98915e06bc | |||
| 3bdd9626f3 | |||
| 15f4292a1f | |||
| ee7c74ceeb | |||
| af7c614438 | |||
| 411629a57d | |||
| 54ea5bbac7 | |||
| 28e0d3d771 | |||
| 9007a02302 | |||
| fb326a58fc | |||
| f1873bbca1 | |||
| 6770c04073 | |||
| c38e4f9639 | |||
| 376993be4c | |||
| df6bce372b | |||
| 185059959b | |||
| 1e2fb6de30 | |||
| 3314bc94b6 | |||
| 0bf7350615 | |||
| f02ce90559 | |||
| b8e3d3f791 | |||
| 96121a66c5 | |||
| a81efdbb25 | |||
| d6e0ef2710 | |||
| dee584ee15 | |||
| 834705490e | |||
| ef4eadd5d3 | |||
| 46e423d217 | |||
| 6773914144 | |||
| 8af626d295 | |||
| eda6360fa3 | |||
| 93120775cd | |||
| 405227d531 | |||
| daedc6f454 | |||
| eff53e95f9 | |||
| 3727168b50 | |||
| e4dee5b372 | |||
| 1f421fce01 | |||
| 05d9375759 | |||
| 73b34e3f85 | |||
| 50579d2524 | |||
| 5beb887247 | |||
| 3cc9502c90 | |||
| 8b0fc04d93 | |||
| 581a3e444d | |||
| 5e02b20482 | |||
| 33ae64201c | |||
| a57030a0cd | |||
| eba6754b06 | |||
| 8b57893e40 | |||
| 4248f82211 | |||
| 0ac61240c5 | |||
| 5852a913a8 | |||
| 800d53f76b | |||
| 0be2752366 | |||
| 0fb629915f | |||
| 9a0d06247a | |||
| 760b718981 | |||
| 99a00d3dd9 | |||
| befcbf56fe | |||
| f0de1a08b8 | |||
| 07db81a4bb | |||
| 2c38be079e | |||
| e9edfd1c54 | |||
| 641bb7ac6b | |||
| c88fa27b1d | |||
| 114579c33b | |||
| fa15769f39 | |||
| 56d943388d | |||
| 5304e9f259 | |||
| 0b1df62215 | |||
| 3b0108e4c1 | |||
| e1b2f593d6 | |||
| d57a7008f1 |
+1
-1
@@ -1,9 +1,9 @@
|
|||||||
*.autosave
|
*.autosave
|
||||||
*.pyc
|
*.pyc
|
||||||
*.user
|
*.user
|
||||||
|
*~
|
||||||
.*.swp
|
.*.swp
|
||||||
.DS_Store
|
.DS_Store
|
||||||
.sw[a-z]
|
.sw[a-z]
|
||||||
/modules/refman.rst
|
|
||||||
tags
|
tags
|
||||||
tegra/
|
tegra/
|
||||||
|
|||||||
@@ -0,0 +1,2 @@
|
|||||||
|
[tgit]
|
||||||
|
icon = doc/opencv.ico
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
ippicv
|
||||||
Vendored
+2
@@ -3,9 +3,11 @@ set(HAVE_FFMPEG_CODEC 1)
|
|||||||
set(HAVE_FFMPEG_FORMAT 1)
|
set(HAVE_FFMPEG_FORMAT 1)
|
||||||
set(HAVE_FFMPEG_UTIL 1)
|
set(HAVE_FFMPEG_UTIL 1)
|
||||||
set(HAVE_FFMPEG_SWSCALE 1)
|
set(HAVE_FFMPEG_SWSCALE 1)
|
||||||
|
set(HAVE_FFMPEG_RESAMPLE 0)
|
||||||
set(HAVE_GENTOO_FFMPEG 1)
|
set(HAVE_GENTOO_FFMPEG 1)
|
||||||
|
|
||||||
set(ALIASOF_libavcodec_VERSION 55.18.102)
|
set(ALIASOF_libavcodec_VERSION 55.18.102)
|
||||||
set(ALIASOF_libavformat_VERSION 55.12.100)
|
set(ALIASOF_libavformat_VERSION 55.12.100)
|
||||||
set(ALIASOF_libavutil_VERSION 52.38.100)
|
set(ALIASOF_libavutil_VERSION 52.38.100)
|
||||||
set(ALIASOF_libswscale_VERSION 2.3.100)
|
set(ALIASOF_libswscale_VERSION 2.3.100)
|
||||||
|
set(ALIASOF_libavresample_VERSION 1.0.1)
|
||||||
Vendored
+1
-1
@@ -1,2 +1,2 @@
|
|||||||
set path=c:\dev\msys32\bin;%path% & gcc -Wall -shared -o opencv_ffmpeg.dll -O2 -x c++ -I../include -I../include/ffmpeg_ -I../../modules/highgui/src ffopencv.c -L../lib -lavformat -lavcodec -lavdevice -lswscale -lavutil -liconv -lws2_32
|
set path=c:\dev\msys32\bin;%path% & gcc -Wall -shared -o opencv_ffmpeg.dll -O2 -x c++ -I../include -I../include/ffmpeg_ -I../../modules/highgui/src ffopencv.c -L../lib -lavformat -lavcodec -lavdevice -lswscale -lavutil -lws2_32
|
||||||
set path=c:\dev\msys64\bin;%path% & gcc -m64 -Wall -shared -o opencv_ffmpeg_64.dll -O2 -x c++ -I../include -I../include/ffmpeg_ -I../../modules/highgui/src ffopencv.c -L../lib -lavformat64 -lavcodec64 -lavdevice64 -lswscale64 -lavutil64 -lws2_32
|
set path=c:\dev\msys64\bin;%path% & gcc -m64 -Wall -shared -o opencv_ffmpeg_64.dll -O2 -x c++ -I../include -I../include/ffmpeg_ -I../../modules/highgui/src ffopencv.c -L../lib -lavformat64 -lavcodec64 -lavdevice64 -lswscale64 -lavutil64 -lws2_32
|
||||||
Vendored
BIN
Binary file not shown.
Vendored
-502
@@ -1,502 +0,0 @@
|
|||||||
//=============================================================================
|
|
||||||
//
|
|
||||||
// multimon.h -- Stub module that fakes multiple monitor apis on Win32 OSes
|
|
||||||
// without them.
|
|
||||||
//
|
|
||||||
// By using this header your code will get back default values from
|
|
||||||
// GetSystemMetrics() for new metrics, and the new multimonitor APIs
|
|
||||||
// will act like only one display is present on a Win32 OS without
|
|
||||||
// multimonitor APIs.
|
|
||||||
//
|
|
||||||
// Exactly one source must include this with COMPILE_MULTIMON_STUBS defined.
|
|
||||||
//
|
|
||||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
||||||
//
|
|
||||||
//=============================================================================
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" { // Assume C declarations for C++
|
|
||||||
#endif // __cplusplus
|
|
||||||
|
|
||||||
//
|
|
||||||
// If we are building with Win95/NT4 headers, we need to declare
|
|
||||||
// the multimonitor-related metrics and APIs ourselves.
|
|
||||||
//
|
|
||||||
#ifndef SM_CMONITORS
|
|
||||||
|
|
||||||
#define SM_XVIRTUALSCREEN 76
|
|
||||||
#define SM_YVIRTUALSCREEN 77
|
|
||||||
#define SM_CXVIRTUALSCREEN 78
|
|
||||||
#define SM_CYVIRTUALSCREEN 79
|
|
||||||
#define SM_CMONITORS 80
|
|
||||||
#define SM_SAMEDISPLAYFORMAT 81
|
|
||||||
|
|
||||||
// HMONITOR is already declared if WINVER >= 0x0500 in windef.h
|
|
||||||
// This is for components built with an older version number.
|
|
||||||
//
|
|
||||||
#if !defined(HMONITOR_DECLARED) && (WINVER < 0x0500)
|
|
||||||
DECLARE_HANDLE(HMONITOR);
|
|
||||||
#define HMONITOR_DECLARED
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define MONITOR_DEFAULTTONULL 0x00000000
|
|
||||||
#define MONITOR_DEFAULTTOPRIMARY 0x00000001
|
|
||||||
#define MONITOR_DEFAULTTONEAREST 0x00000002
|
|
||||||
|
|
||||||
#define MONITORINFOF_PRIMARY 0x00000001
|
|
||||||
|
|
||||||
typedef struct tagMONITORINFO
|
|
||||||
{
|
|
||||||
DWORD cbSize;
|
|
||||||
RECT rcMonitor;
|
|
||||||
RECT rcWork;
|
|
||||||
DWORD dwFlags;
|
|
||||||
} MONITORINFO, *LPMONITORINFO;
|
|
||||||
|
|
||||||
#ifndef CCHDEVICENAME
|
|
||||||
#define CCHDEVICENAME 32
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
typedef struct tagMONITORINFOEXA : public tagMONITORINFO
|
|
||||||
{
|
|
||||||
CHAR szDevice[CCHDEVICENAME];
|
|
||||||
} MONITORINFOEXA, *LPMONITORINFOEXA;
|
|
||||||
typedef struct tagMONITORINFOEXW : public tagMONITORINFO
|
|
||||||
{
|
|
||||||
WCHAR szDevice[CCHDEVICENAME];
|
|
||||||
} MONITORINFOEXW, *LPMONITORINFOEXW;
|
|
||||||
#ifdef UNICODE
|
|
||||||
typedef MONITORINFOEXW MONITORINFOEX;
|
|
||||||
typedef LPMONITORINFOEXW LPMONITORINFOEX;
|
|
||||||
#else
|
|
||||||
typedef MONITORINFOEXA MONITORINFOEX;
|
|
||||||
typedef LPMONITORINFOEXA LPMONITORINFOEX;
|
|
||||||
#endif // UNICODE
|
|
||||||
#else // ndef __cplusplus
|
|
||||||
typedef struct tagMONITORINFOEXA
|
|
||||||
{
|
|
||||||
MONITORINFO;
|
|
||||||
CHAR szDevice[CCHDEVICENAME];
|
|
||||||
} MONITORINFOEXA, *LPMONITORINFOEXA;
|
|
||||||
typedef struct tagMONITORINFOEXW
|
|
||||||
{
|
|
||||||
MONITORINFO;
|
|
||||||
WCHAR szDevice[CCHDEVICENAME];
|
|
||||||
} MONITORINFOEXW, *LPMONITORINFOEXW;
|
|
||||||
#ifdef UNICODE
|
|
||||||
typedef MONITORINFOEXW MONITORINFOEX;
|
|
||||||
typedef LPMONITORINFOEXW LPMONITORINFOEX;
|
|
||||||
#else
|
|
||||||
typedef MONITORINFOEXA MONITORINFOEX;
|
|
||||||
typedef LPMONITORINFOEXA LPMONITORINFOEX;
|
|
||||||
#endif // UNICODE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
typedef BOOL (CALLBACK* MONITORENUMPROC)(HMONITOR, HDC, LPRECT, LPARAM);
|
|
||||||
|
|
||||||
#ifndef DISPLAY_DEVICE_ATTACHED_TO_DESKTOP
|
|
||||||
typedef struct _DISPLAY_DEVICEA {
|
|
||||||
DWORD cb;
|
|
||||||
CHAR DeviceName[32];
|
|
||||||
CHAR DeviceString[128];
|
|
||||||
DWORD StateFlags;
|
|
||||||
CHAR DeviceID[128];
|
|
||||||
CHAR DeviceKey[128];
|
|
||||||
} DISPLAY_DEVICEA, *PDISPLAY_DEVICEA, *LPDISPLAY_DEVICEA;
|
|
||||||
typedef struct _DISPLAY_DEVICEW {
|
|
||||||
DWORD cb;
|
|
||||||
WCHAR DeviceName[32];
|
|
||||||
WCHAR DeviceString[128];
|
|
||||||
DWORD StateFlags;
|
|
||||||
WCHAR DeviceID[128];
|
|
||||||
WCHAR DeviceKey[128];
|
|
||||||
} DISPLAY_DEVICEW, *PDISPLAY_DEVICEW, *LPDISPLAY_DEVICEW;
|
|
||||||
#ifdef UNICODE
|
|
||||||
typedef DISPLAY_DEVICEW DISPLAY_DEVICE;
|
|
||||||
typedef PDISPLAY_DEVICEW PDISPLAY_DEVICE;
|
|
||||||
typedef LPDISPLAY_DEVICEW LPDISPLAY_DEVICE;
|
|
||||||
#else
|
|
||||||
typedef DISPLAY_DEVICEA DISPLAY_DEVICE;
|
|
||||||
typedef PDISPLAY_DEVICEA PDISPLAY_DEVICE;
|
|
||||||
typedef LPDISPLAY_DEVICEA LPDISPLAY_DEVICE;
|
|
||||||
#endif // UNICODE
|
|
||||||
|
|
||||||
#define DISPLAY_DEVICE_ATTACHED_TO_DESKTOP 0x00000001
|
|
||||||
#define DISPLAY_DEVICE_MULTI_DRIVER 0x00000002
|
|
||||||
#define DISPLAY_DEVICE_PRIMARY_DEVICE 0x00000004
|
|
||||||
#define DISPLAY_DEVICE_MIRRORING_DRIVER 0x00000008
|
|
||||||
#define DISPLAY_DEVICE_VGA_COMPATIBLE 0x00000010
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif // SM_CMONITORS
|
|
||||||
|
|
||||||
#undef GetMonitorInfo
|
|
||||||
#undef GetSystemMetrics
|
|
||||||
#undef MonitorFromWindow
|
|
||||||
#undef MonitorFromRect
|
|
||||||
#undef MonitorFromPoint
|
|
||||||
#undef EnumDisplayMonitors
|
|
||||||
#undef EnumDisplayDevices
|
|
||||||
|
|
||||||
//
|
|
||||||
// Define COMPILE_MULTIMON_STUBS to compile the stubs;
|
|
||||||
// otherwise, you get the declarations.
|
|
||||||
//
|
|
||||||
#ifdef COMPILE_MULTIMON_STUBS
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
//
|
|
||||||
// Implement the API stubs.
|
|
||||||
//
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
#ifndef _MULTIMON_USE_SECURE_CRT
|
|
||||||
#if defined(__GOT_SECURE_LIB__) && __GOT_SECURE_LIB__ >= 200402L
|
|
||||||
#define _MULTIMON_USE_SECURE_CRT 1
|
|
||||||
#else
|
|
||||||
#define _MULTIMON_USE_SECURE_CRT 0
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef MULTIMON_FNS_DEFINED
|
|
||||||
|
|
||||||
int (WINAPI* g_pfnGetSystemMetrics)(int) = NULL;
|
|
||||||
HMONITOR (WINAPI* g_pfnMonitorFromWindow)(HWND, DWORD) = NULL;
|
|
||||||
HMONITOR (WINAPI* g_pfnMonitorFromRect)(LPCRECT, DWORD) = NULL;
|
|
||||||
HMONITOR (WINAPI* g_pfnMonitorFromPoint)(POINT, DWORD) = NULL;
|
|
||||||
BOOL (WINAPI* g_pfnGetMonitorInfo)(HMONITOR, LPMONITORINFO) = NULL;
|
|
||||||
BOOL (WINAPI* g_pfnEnumDisplayMonitors)(HDC, LPCRECT, MONITORENUMPROC, LPARAM) = NULL;
|
|
||||||
BOOL (WINAPI* g_pfnEnumDisplayDevices)(PVOID, DWORD, PDISPLAY_DEVICE,DWORD) = NULL;
|
|
||||||
BOOL g_fMultiMonInitDone = FALSE;
|
|
||||||
BOOL g_fMultimonPlatformNT = FALSE;
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
BOOL IsPlatformNT()
|
|
||||||
{
|
|
||||||
OSVERSIONINFOA osvi = {0};
|
|
||||||
osvi.dwOSVersionInfoSize = sizeof(osvi);
|
|
||||||
GetVersionExA((OSVERSIONINFOA*)&osvi);
|
|
||||||
return (VER_PLATFORM_WIN32_NT == osvi.dwPlatformId);
|
|
||||||
}
|
|
||||||
|
|
||||||
BOOL InitMultipleMonitorStubs(void)
|
|
||||||
{
|
|
||||||
HMODULE hUser32;
|
|
||||||
if (g_fMultiMonInitDone)
|
|
||||||
{
|
|
||||||
return g_pfnGetMonitorInfo != NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
g_fMultimonPlatformNT = IsPlatformNT();
|
|
||||||
hUser32 = GetModuleHandle(TEXT("USER32"));
|
|
||||||
if (hUser32 &&
|
|
||||||
(*(FARPROC*)&g_pfnGetSystemMetrics = GetProcAddress(hUser32,"GetSystemMetrics")) != NULL &&
|
|
||||||
(*(FARPROC*)&g_pfnMonitorFromWindow = GetProcAddress(hUser32,"MonitorFromWindow")) != NULL &&
|
|
||||||
(*(FARPROC*)&g_pfnMonitorFromRect = GetProcAddress(hUser32,"MonitorFromRect")) != NULL &&
|
|
||||||
(*(FARPROC*)&g_pfnMonitorFromPoint = GetProcAddress(hUser32,"MonitorFromPoint")) != NULL &&
|
|
||||||
(*(FARPROC*)&g_pfnEnumDisplayMonitors = GetProcAddress(hUser32,"EnumDisplayMonitors")) != NULL &&
|
|
||||||
#ifdef UNICODE
|
|
||||||
(*(FARPROC*)&g_pfnEnumDisplayDevices = GetProcAddress(hUser32,"EnumDisplayDevicesW")) != NULL &&
|
|
||||||
(*(FARPROC*)&g_pfnGetMonitorInfo = g_fMultimonPlatformNT ? GetProcAddress(hUser32,"GetMonitorInfoW") :
|
|
||||||
GetProcAddress(hUser32,"GetMonitorInfoA")) != NULL
|
|
||||||
#else
|
|
||||||
(*(FARPROC*)&g_pfnGetMonitorInfo = GetProcAddress(hUser32,"GetMonitorInfoA")) != NULL &&
|
|
||||||
(*(FARPROC*)&g_pfnEnumDisplayDevices = GetProcAddress(hUser32,"EnumDisplayDevicesA")) != NULL
|
|
||||||
#endif
|
|
||||||
) {
|
|
||||||
g_fMultiMonInitDone = TRUE;
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
g_pfnGetSystemMetrics = NULL;
|
|
||||||
g_pfnMonitorFromWindow = NULL;
|
|
||||||
g_pfnMonitorFromRect = NULL;
|
|
||||||
g_pfnMonitorFromPoint = NULL;
|
|
||||||
g_pfnGetMonitorInfo = NULL;
|
|
||||||
g_pfnEnumDisplayMonitors = NULL;
|
|
||||||
g_pfnEnumDisplayDevices = NULL;
|
|
||||||
|
|
||||||
g_fMultiMonInitDone = TRUE;
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
//
|
|
||||||
// fake implementations of Monitor APIs that work with the primary display
|
|
||||||
// no special parameter validation is made since these run in client code
|
|
||||||
//
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
int WINAPI
|
|
||||||
xGetSystemMetrics(int nIndex)
|
|
||||||
{
|
|
||||||
if (InitMultipleMonitorStubs())
|
|
||||||
return g_pfnGetSystemMetrics(nIndex);
|
|
||||||
|
|
||||||
switch (nIndex)
|
|
||||||
{
|
|
||||||
case SM_CMONITORS:
|
|
||||||
case SM_SAMEDISPLAYFORMAT:
|
|
||||||
return 1;
|
|
||||||
|
|
||||||
case SM_XVIRTUALSCREEN:
|
|
||||||
case SM_YVIRTUALSCREEN:
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
case SM_CXVIRTUALSCREEN:
|
|
||||||
nIndex = SM_CXSCREEN;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SM_CYVIRTUALSCREEN:
|
|
||||||
nIndex = SM_CYSCREEN;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return GetSystemMetrics(nIndex);
|
|
||||||
}
|
|
||||||
|
|
||||||
#define xPRIMARY_MONITOR ((HMONITOR)0x12340042)
|
|
||||||
|
|
||||||
HMONITOR WINAPI
|
|
||||||
xMonitorFromPoint(POINT ptScreenCoords, DWORD dwFlags)
|
|
||||||
{
|
|
||||||
if (InitMultipleMonitorStubs())
|
|
||||||
return g_pfnMonitorFromPoint(ptScreenCoords, dwFlags);
|
|
||||||
|
|
||||||
if ((dwFlags & (MONITOR_DEFAULTTOPRIMARY | MONITOR_DEFAULTTONEAREST)) ||
|
|
||||||
((ptScreenCoords.x >= 0) &&
|
|
||||||
(ptScreenCoords.x < GetSystemMetrics(SM_CXSCREEN)) &&
|
|
||||||
(ptScreenCoords.y >= 0) &&
|
|
||||||
(ptScreenCoords.y < GetSystemMetrics(SM_CYSCREEN))))
|
|
||||||
{
|
|
||||||
return xPRIMARY_MONITOR;
|
|
||||||
}
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
HMONITOR WINAPI
|
|
||||||
xMonitorFromRect(LPCRECT lprcScreenCoords, DWORD dwFlags)
|
|
||||||
{
|
|
||||||
if (InitMultipleMonitorStubs())
|
|
||||||
return g_pfnMonitorFromRect(lprcScreenCoords, dwFlags);
|
|
||||||
|
|
||||||
if ((dwFlags & (MONITOR_DEFAULTTOPRIMARY | MONITOR_DEFAULTTONEAREST)) ||
|
|
||||||
((lprcScreenCoords->right > 0) &&
|
|
||||||
(lprcScreenCoords->bottom > 0) &&
|
|
||||||
(lprcScreenCoords->left < GetSystemMetrics(SM_CXSCREEN)) &&
|
|
||||||
(lprcScreenCoords->top < GetSystemMetrics(SM_CYSCREEN))))
|
|
||||||
{
|
|
||||||
return xPRIMARY_MONITOR;
|
|
||||||
}
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
HMONITOR WINAPI
|
|
||||||
xMonitorFromWindow(HWND hWnd, DWORD dwFlags)
|
|
||||||
{
|
|
||||||
WINDOWPLACEMENT wp;
|
|
||||||
|
|
||||||
if (InitMultipleMonitorStubs())
|
|
||||||
return g_pfnMonitorFromWindow(hWnd, dwFlags);
|
|
||||||
|
|
||||||
if (dwFlags & (MONITOR_DEFAULTTOPRIMARY | MONITOR_DEFAULTTONEAREST))
|
|
||||||
return xPRIMARY_MONITOR;
|
|
||||||
|
|
||||||
if (IsIconic(hWnd) ?
|
|
||||||
GetWindowPlacement(hWnd, &wp) :
|
|
||||||
GetWindowRect(hWnd, &wp.rcNormalPosition)) {
|
|
||||||
|
|
||||||
return xMonitorFromRect(&wp.rcNormalPosition, dwFlags);
|
|
||||||
}
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
BOOL WINAPI
|
|
||||||
xGetMonitorInfo(HMONITOR hMonitor, __inout LPMONITORINFO lpMonitorInfo)
|
|
||||||
{
|
|
||||||
RECT rcWork;
|
|
||||||
|
|
||||||
if (InitMultipleMonitorStubs())
|
|
||||||
{
|
|
||||||
BOOL f = g_pfnGetMonitorInfo(hMonitor, lpMonitorInfo);
|
|
||||||
#ifdef UNICODE
|
|
||||||
if (f && !g_fMultimonPlatformNT && (lpMonitorInfo->cbSize >= sizeof(MONITORINFOEX)))
|
|
||||||
{
|
|
||||||
MultiByteToWideChar(CP_ACP, 0,
|
|
||||||
(LPSTR)((MONITORINFOEX*)lpMonitorInfo)->szDevice, -1,
|
|
||||||
((MONITORINFOEX*)lpMonitorInfo)->szDevice, (sizeof(((MONITORINFOEX*)lpMonitorInfo)->szDevice)/sizeof(TCHAR)));
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
return f;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((hMonitor == xPRIMARY_MONITOR) &&
|
|
||||||
lpMonitorInfo &&
|
|
||||||
(lpMonitorInfo->cbSize >= sizeof(MONITORINFO)) &&
|
|
||||||
SystemParametersInfoA(SPI_GETWORKAREA, 0, &rcWork, 0))
|
|
||||||
{
|
|
||||||
lpMonitorInfo->rcMonitor.left = 0;
|
|
||||||
lpMonitorInfo->rcMonitor.top = 0;
|
|
||||||
lpMonitorInfo->rcMonitor.right = GetSystemMetrics(SM_CXSCREEN);
|
|
||||||
lpMonitorInfo->rcMonitor.bottom = GetSystemMetrics(SM_CYSCREEN);
|
|
||||||
lpMonitorInfo->rcWork = rcWork;
|
|
||||||
lpMonitorInfo->dwFlags = MONITORINFOF_PRIMARY;
|
|
||||||
|
|
||||||
if (lpMonitorInfo->cbSize >= sizeof(MONITORINFOEX))
|
|
||||||
{
|
|
||||||
#ifdef UNICODE
|
|
||||||
MultiByteToWideChar(CP_ACP, 0, "DISPLAY", -1, ((MONITORINFOEX*)lpMonitorInfo)->szDevice, (sizeof(((MONITORINFOEX*)lpMonitorInfo)->szDevice)/sizeof(TCHAR)));
|
|
||||||
#else // UNICODE
|
|
||||||
#if _MULTIMON_USE_SECURE_CRT
|
|
||||||
strncpy_s(((MONITORINFOEX*)lpMonitorInfo)->szDevice, (sizeof(((MONITORINFOEX*)lpMonitorInfo)->szDevice)/sizeof(TCHAR)), TEXT("DISPLAY"), (sizeof(((MONITORINFOEX*)lpMonitorInfo)->szDevice)/sizeof(TCHAR)) - 1);
|
|
||||||
#else
|
|
||||||
lstrcpyn(((MONITORINFOEX*)lpMonitorInfo)->szDevice, TEXT("DISPLAY"), (sizeof(((MONITORINFOEX*)lpMonitorInfo)->szDevice)/sizeof(TCHAR)));
|
|
||||||
#endif // _MULTIMON_USE_SECURE_CRT
|
|
||||||
#endif // UNICODE
|
|
||||||
}
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
BOOL WINAPI
|
|
||||||
xEnumDisplayMonitors(
|
|
||||||
HDC hdcOptionalForPainting,
|
|
||||||
LPCRECT lprcEnumMonitorsThatIntersect,
|
|
||||||
MONITORENUMPROC lpfnEnumProc,
|
|
||||||
LPARAM dwData)
|
|
||||||
{
|
|
||||||
RECT rcLimit;
|
|
||||||
|
|
||||||
if (InitMultipleMonitorStubs()) {
|
|
||||||
return g_pfnEnumDisplayMonitors(
|
|
||||||
hdcOptionalForPainting,
|
|
||||||
lprcEnumMonitorsThatIntersect,
|
|
||||||
lpfnEnumProc,
|
|
||||||
dwData);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!lpfnEnumProc)
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
rcLimit.left = 0;
|
|
||||||
rcLimit.top = 0;
|
|
||||||
rcLimit.right = GetSystemMetrics(SM_CXSCREEN);
|
|
||||||
rcLimit.bottom = GetSystemMetrics(SM_CYSCREEN);
|
|
||||||
|
|
||||||
if (hdcOptionalForPainting)
|
|
||||||
{
|
|
||||||
RECT rcClip;
|
|
||||||
POINT ptOrg;
|
|
||||||
|
|
||||||
switch (GetClipBox(hdcOptionalForPainting, &rcClip))
|
|
||||||
{
|
|
||||||
default:
|
|
||||||
if (!GetDCOrgEx(hdcOptionalForPainting, &ptOrg))
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
OffsetRect(&rcLimit, -ptOrg.x, -ptOrg.y);
|
|
||||||
if (IntersectRect(&rcLimit, &rcLimit, &rcClip) &&
|
|
||||||
(!lprcEnumMonitorsThatIntersect ||
|
|
||||||
IntersectRect(&rcLimit, &rcLimit, lprcEnumMonitorsThatIntersect))) {
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
//fall thru
|
|
||||||
case NULLREGION:
|
|
||||||
return TRUE;
|
|
||||||
case ERROR:
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if ( lprcEnumMonitorsThatIntersect &&
|
|
||||||
!IntersectRect(&rcLimit, &rcLimit, lprcEnumMonitorsThatIntersect)) {
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return lpfnEnumProc(
|
|
||||||
xPRIMARY_MONITOR,
|
|
||||||
hdcOptionalForPainting,
|
|
||||||
&rcLimit,
|
|
||||||
dwData);
|
|
||||||
}
|
|
||||||
|
|
||||||
BOOL WINAPI
|
|
||||||
xEnumDisplayDevices(
|
|
||||||
PVOID Unused,
|
|
||||||
DWORD iDevNum,
|
|
||||||
__inout PDISPLAY_DEVICE lpDisplayDevice,
|
|
||||||
DWORD dwFlags)
|
|
||||||
{
|
|
||||||
if (InitMultipleMonitorStubs())
|
|
||||||
return g_pfnEnumDisplayDevices(Unused, iDevNum, lpDisplayDevice, dwFlags);
|
|
||||||
|
|
||||||
if (Unused != NULL)
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
if (iDevNum != 0)
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
if (lpDisplayDevice == NULL || lpDisplayDevice->cb < sizeof(DISPLAY_DEVICE))
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
#ifdef UNICODE
|
|
||||||
MultiByteToWideChar(CP_ACP, 0, "DISPLAY", -1, lpDisplayDevice->DeviceName, (sizeof(lpDisplayDevice->DeviceName)/sizeof(TCHAR)));
|
|
||||||
MultiByteToWideChar(CP_ACP, 0, "DISPLAY", -1, lpDisplayDevice->DeviceString, (sizeof(lpDisplayDevice->DeviceString)/sizeof(TCHAR)));
|
|
||||||
#else // UNICODE
|
|
||||||
#if _MULTIMON_USE_SECURE_CRT
|
|
||||||
strncpy_s((LPTSTR)lpDisplayDevice->DeviceName, (sizeof(lpDisplayDevice->DeviceName)/sizeof(TCHAR)), TEXT("DISPLAY"), (sizeof(lpDisplayDevice->DeviceName)/sizeof(TCHAR)) - 1);
|
|
||||||
strncpy_s((LPTSTR)lpDisplayDevice->DeviceString, (sizeof(lpDisplayDevice->DeviceString)/sizeof(TCHAR)), TEXT("DISPLAY"), (sizeof(lpDisplayDevice->DeviceName)/sizeof(TCHAR)) - 1);
|
|
||||||
#else
|
|
||||||
lstrcpyn((LPTSTR)lpDisplayDevice->DeviceName, TEXT("DISPLAY"), (sizeof(lpDisplayDevice->DeviceName)/sizeof(TCHAR)));
|
|
||||||
lstrcpyn((LPTSTR)lpDisplayDevice->DeviceString, TEXT("DISPLAY"), (sizeof(lpDisplayDevice->DeviceString)/sizeof(TCHAR)));
|
|
||||||
#endif // _MULTIMON_USE_SECURE_CRT
|
|
||||||
#endif // UNICODE
|
|
||||||
|
|
||||||
lpDisplayDevice->StateFlags = DISPLAY_DEVICE_ATTACHED_TO_DESKTOP | DISPLAY_DEVICE_PRIMARY_DEVICE;
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
#undef xPRIMARY_MONITOR
|
|
||||||
#undef COMPILE_MULTIMON_STUBS
|
|
||||||
|
|
||||||
#else // COMPILE_MULTIMON_STUBS
|
|
||||||
|
|
||||||
extern int WINAPI xGetSystemMetrics(int);
|
|
||||||
extern HMONITOR WINAPI xMonitorFromWindow(HWND, DWORD);
|
|
||||||
extern HMONITOR WINAPI xMonitorFromRect(LPCRECT, DWORD);
|
|
||||||
extern HMONITOR WINAPI xMonitorFromPoint(POINT, DWORD);
|
|
||||||
extern BOOL WINAPI xGetMonitorInfo(HMONITOR, LPMONITORINFO);
|
|
||||||
extern BOOL WINAPI xEnumDisplayMonitors(HDC, LPCRECT, MONITORENUMPROC, LPARAM);
|
|
||||||
extern BOOL WINAPI xEnumDisplayDevices(PVOID, DWORD, PDISPLAY_DEVICE, DWORD);
|
|
||||||
|
|
||||||
#endif // COMPILE_MULTIMON_STUBS
|
|
||||||
|
|
||||||
//
|
|
||||||
// build defines that replace the regular APIs with our versions
|
|
||||||
//
|
|
||||||
#define GetSystemMetrics xGetSystemMetrics
|
|
||||||
#define MonitorFromWindow xMonitorFromWindow
|
|
||||||
#define MonitorFromRect xMonitorFromRect
|
|
||||||
#define MonitorFromPoint xMonitorFromPoint
|
|
||||||
#define GetMonitorInfo xGetMonitorInfo
|
|
||||||
#define EnumDisplayMonitors xEnumDisplayMonitors
|
|
||||||
#define EnumDisplayDevices xEnumDisplayDevices
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif // __cplusplus
|
|
||||||
|
|
||||||
|
|
||||||
+1
-1
@@ -210,7 +210,7 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(linux) || defined(__APPLE__) || defined(__MACOSX)
|
#if defined(__linux__) || defined(__APPLE__) || defined(__MACOSX)
|
||||||
#include <alloca.h>
|
#include <alloca.h>
|
||||||
|
|
||||||
#include <emmintrin.h>
|
#include <emmintrin.h>
|
||||||
|
|||||||
+2
-2
@@ -92,7 +92,7 @@ extern "C" {
|
|||||||
#define CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED __attribute__((deprecated))
|
#define CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED __attribute__((deprecated))
|
||||||
#define CL_EXT_PREFIX__VERSION_1_1_DEPRECATED
|
#define CL_EXT_PREFIX__VERSION_1_1_DEPRECATED
|
||||||
#endif
|
#endif
|
||||||
#elif _WIN32
|
#elif defined(_WIN32)
|
||||||
#ifdef CL_USE_DEPRECATED_OPENCL_1_0_APIS
|
#ifdef CL_USE_DEPRECATED_OPENCL_1_0_APIS
|
||||||
#define CL_EXT_SUFFIX__VERSION_1_0_DEPRECATED
|
#define CL_EXT_SUFFIX__VERSION_1_0_DEPRECATED
|
||||||
#define CL_EXT_PREFIX__VERSION_1_0_DEPRECATED
|
#define CL_EXT_PREFIX__VERSION_1_0_DEPRECATED
|
||||||
@@ -454,7 +454,7 @@ typedef unsigned int cl_GLenum;
|
|||||||
/* Define alignment keys */
|
/* Define alignment keys */
|
||||||
#if defined( __GNUC__ )
|
#if defined( __GNUC__ )
|
||||||
#define CL_ALIGNED(_x) __attribute__ ((aligned(_x)))
|
#define CL_ALIGNED(_x) __attribute__ ((aligned(_x)))
|
||||||
#elif defined( _WIN32) && (_MSC_VER)
|
#elif defined( _WIN32) && defined(_MSC_VER)
|
||||||
/* Alignment keys neutered on windows because MSVC can't swallow function arguments with alignment requirements */
|
/* Alignment keys neutered on windows because MSVC can't swallow function arguments with alignment requirements */
|
||||||
/* http://msdn.microsoft.com/en-us/library/373ak2y1%28VS.71%29.aspx */
|
/* http://msdn.microsoft.com/en-us/library/373ak2y1%28VS.71%29.aspx */
|
||||||
/* #include <crtdefs.h> */
|
/* #include <crtdefs.h> */
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
Vendored
BIN
Binary file not shown.
Vendored
BIN
Binary file not shown.
Vendored
BIN
Binary file not shown.
Vendored
BIN
Binary file not shown.
Vendored
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
Vendored
+1
-1
@@ -46,5 +46,5 @@ if(ENABLE_SOLUTION_FOLDERS)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(NOT BUILD_SHARED_LIBS)
|
if(NOT BUILD_SHARED_LIBS)
|
||||||
ocv_install_target(${JASPER_LIBRARY} EXPORT OpenCVModules ARCHIVE DESTINATION ${OPENCV_3P_LIB_INSTALL_PATH} COMPONENT main)
|
ocv_install_target(${JASPER_LIBRARY} EXPORT OpenCVModules ARCHIVE DESTINATION ${OPENCV_3P_LIB_INSTALL_PATH} COMPONENT dev)
|
||||||
endif()
|
endif()
|
||||||
|
|||||||
Vendored
+1
-1
@@ -39,5 +39,5 @@ if(ENABLE_SOLUTION_FOLDERS)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(NOT BUILD_SHARED_LIBS)
|
if(NOT BUILD_SHARED_LIBS)
|
||||||
ocv_install_target(${JPEG_LIBRARY} EXPORT OpenCVModules ARCHIVE DESTINATION ${OPENCV_3P_LIB_INSTALL_PATH} COMPONENT main)
|
ocv_install_target(${JPEG_LIBRARY} EXPORT OpenCVModules ARCHIVE DESTINATION ${OPENCV_3P_LIB_INSTALL_PATH} COMPONENT dev)
|
||||||
endif()
|
endif()
|
||||||
|
|||||||
Vendored
+2
-2
@@ -14,7 +14,7 @@ ocv_include_directories("${CMAKE_CURRENT_SOURCE_DIR}" ${ZLIB_INCLUDE_DIR})
|
|||||||
file(GLOB lib_srcs *.c)
|
file(GLOB lib_srcs *.c)
|
||||||
file(GLOB lib_hdrs *.h)
|
file(GLOB lib_hdrs *.h)
|
||||||
|
|
||||||
if(NEON)
|
if(ARM AND NEON)
|
||||||
list(APPEND lib_srcs arm/filter_neon.S)
|
list(APPEND lib_srcs arm/filter_neon.S)
|
||||||
add_definitions(-DPNG_ARM_NEON)
|
add_definitions(-DPNG_ARM_NEON)
|
||||||
endif()
|
endif()
|
||||||
@@ -55,5 +55,5 @@ if(ENABLE_SOLUTION_FOLDERS)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(NOT BUILD_SHARED_LIBS)
|
if(NOT BUILD_SHARED_LIBS)
|
||||||
ocv_install_target(${PNG_LIBRARY} EXPORT OpenCVModules ARCHIVE DESTINATION ${OPENCV_3P_LIB_INSTALL_PATH} COMPONENT main)
|
ocv_install_target(${PNG_LIBRARY} EXPORT OpenCVModules ARCHIVE DESTINATION ${OPENCV_3P_LIB_INSTALL_PATH} COMPONENT dev)
|
||||||
endif()
|
endif()
|
||||||
|
|||||||
Vendored
+1
-1
@@ -115,5 +115,5 @@ if(ENABLE_SOLUTION_FOLDERS)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(NOT BUILD_SHARED_LIBS)
|
if(NOT BUILD_SHARED_LIBS)
|
||||||
ocv_install_target(${TIFF_LIBRARY} EXPORT OpenCVModules ARCHIVE DESTINATION ${OPENCV_3P_LIB_INSTALL_PATH} COMPONENT main)
|
ocv_install_target(${TIFF_LIBRARY} EXPORT OpenCVModules ARCHIVE DESTINATION ${OPENCV_3P_LIB_INSTALL_PATH} COMPONENT dev)
|
||||||
endif()
|
endif()
|
||||||
|
|||||||
+2
-10
@@ -54,7 +54,7 @@
|
|||||||
|
|
||||||
/* Native cpu byte order: 1 if big-endian (Motorola) or 0 if little-endian
|
/* Native cpu byte order: 1 if big-endian (Motorola) or 0 if little-endian
|
||||||
(Intel) */
|
(Intel) */
|
||||||
#define HOST_BIGENDIAN 0
|
#define HOST_BIGENDIAN @WORDS_BIGENDIAN@
|
||||||
|
|
||||||
/* Set the native cpu bit order (FILLORDER_LSB2MSB or FILLORDER_MSB2LSB) */
|
/* Set the native cpu bit order (FILLORDER_LSB2MSB or FILLORDER_MSB2LSB) */
|
||||||
#define HOST_FILLORDER FILLORDER_LSB2MSB
|
#define HOST_FILLORDER FILLORDER_LSB2MSB
|
||||||
@@ -156,15 +156,7 @@
|
|||||||
|
|
||||||
/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
|
/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
|
||||||
significant byte first (like Motorola and SPARC, unlike Intel). */
|
significant byte first (like Motorola and SPARC, unlike Intel). */
|
||||||
#if defined AC_APPLE_UNIVERSAL_BUILD
|
#cmakedefine WORDS_BIGENDIAN 1
|
||||||
# if defined __BIG_ENDIAN__
|
|
||||||
# define WORDS_BIGENDIAN 1
|
|
||||||
# endif
|
|
||||||
#else
|
|
||||||
# ifndef WORDS_BIGENDIAN
|
|
||||||
/* # undef WORDS_BIGENDIAN */
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Support Deflate compression */
|
/* Support Deflate compression */
|
||||||
#define ZIP_SUPPORT 1
|
#define ZIP_SUPPORT 1
|
||||||
|
|||||||
Vendored
+1
-1
@@ -62,7 +62,7 @@ if(ENABLE_SOLUTION_FOLDERS)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(NOT BUILD_SHARED_LIBS)
|
if(NOT BUILD_SHARED_LIBS)
|
||||||
ocv_install_target(IlmImf EXPORT OpenCVModules ARCHIVE DESTINATION ${OPENCV_3P_LIB_INSTALL_PATH} COMPONENT main)
|
ocv_install_target(IlmImf EXPORT OpenCVModules ARCHIVE DESTINATION ${OPENCV_3P_LIB_INSTALL_PATH} COMPONENT dev)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set(OPENEXR_INCLUDE_PATHS ${OPENEXR_INCLUDE_PATHS} PARENT_SCOPE)
|
set(OPENEXR_INCLUDE_PATHS ${OPENEXR_INCLUDE_PATHS} PARENT_SCOPE)
|
||||||
|
|||||||
+1
@@ -42,6 +42,7 @@
|
|||||||
#include <ImfRgbaFile.h>
|
#include <ImfRgbaFile.h>
|
||||||
#include <ImfStandardAttributes.h>
|
#include <ImfStandardAttributes.h>
|
||||||
#include <Iex.h>
|
#include <Iex.h>
|
||||||
|
#include <algorithm> // for std::max()
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
using namespace Imath;
|
using namespace Imath;
|
||||||
|
|||||||
+1
@@ -58,6 +58,7 @@
|
|||||||
#include <vector>
|
#include <vector>
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
#include <algorithm> // for std::max()
|
||||||
|
|
||||||
|
|
||||||
namespace Imf {
|
namespace Imf {
|
||||||
|
|||||||
@@ -56,6 +56,7 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
#include <algorithm> // for std::max()
|
||||||
|
|
||||||
|
|
||||||
namespace Imf {
|
namespace Imf {
|
||||||
|
|||||||
+1
@@ -43,6 +43,7 @@
|
|||||||
#include "Iex.h"
|
#include "Iex.h"
|
||||||
#include <ImfMisc.h>
|
#include <ImfMisc.h>
|
||||||
#include <ImfChannelList.h>
|
#include <ImfChannelList.h>
|
||||||
|
#include <algorithm> // for std::max()
|
||||||
|
|
||||||
|
|
||||||
namespace Imf {
|
namespace Imf {
|
||||||
|
|||||||
@@ -63,6 +63,7 @@
|
|||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <map>
|
#include <map>
|
||||||
|
#include <algorithm> // for std::max()
|
||||||
|
|
||||||
|
|
||||||
namespace Imf {
|
namespace Imf {
|
||||||
|
|||||||
+1
@@ -44,6 +44,7 @@
|
|||||||
|
|
||||||
#include "ImathMatrixAlgo.h"
|
#include "ImathMatrixAlgo.h"
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
|
#include <algorithm> // for std::max()
|
||||||
|
|
||||||
#if defined(OPENEXR_DLL)
|
#if defined(OPENEXR_DLL)
|
||||||
#define EXPORT_CONST __declspec(dllexport)
|
#define EXPORT_CONST __declspec(dllexport)
|
||||||
|
|||||||
+72
@@ -0,0 +1,72 @@
|
|||||||
|
diff --git a/3rdparty/openexr/IlmImf/ImfAcesFile.cpp b/3rdparty/openexr/IlmImf/ImfAcesFile.cpp
|
||||||
|
index de4bf83..9418b9d 100644
|
||||||
|
--- a/3rdparty/openexr/IlmImf/ImfAcesFile.cpp
|
||||||
|
+++ b/3rdparty/openexr/IlmImf/ImfAcesFile.cpp
|
||||||
|
@@ -42,6 +42,7 @@
|
||||||
|
#include <ImfRgbaFile.h>
|
||||||
|
#include <ImfStandardAttributes.h>
|
||||||
|
#include <Iex.h>
|
||||||
|
+#include <algorithm> // for std::max()
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
using namespace Imath;
|
||||||
|
diff --git a/3rdparty/openexr/IlmImf/ImfOutputFile.cpp b/3rdparty/openexr/IlmImf/ImfOutputFile.cpp
|
||||||
|
index 8831ec9..e69b92b 100644
|
||||||
|
--- a/3rdparty/openexr/IlmImf/ImfOutputFile.cpp
|
||||||
|
+++ b/3rdparty/openexr/IlmImf/ImfOutputFile.cpp
|
||||||
|
@@ -58,6 +58,7 @@
|
||||||
|
#include <vector>
|
||||||
|
#include <fstream>
|
||||||
|
#include <assert.h>
|
||||||
|
+#include <algorithm> // for std::max()
|
||||||
|
|
||||||
|
|
||||||
|
namespace Imf {
|
||||||
|
diff --git a/3rdparty/openexr/IlmImf/ImfScanLineInputFile.cpp b/3rdparty/openexr/IlmImf/ImfScanLineInputFile.cpp
|
||||||
|
index f7a12a3..5d8b522 100644
|
||||||
|
--- a/3rdparty/openexr/IlmImf/ImfScanLineInputFile.cpp
|
||||||
|
+++ b/3rdparty/openexr/IlmImf/ImfScanLineInputFile.cpp
|
||||||
|
@@ -56,6 +56,7 @@
|
||||||
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
#include <assert.h>
|
||||||
|
+#include <algorithm> // for std::max()
|
||||||
|
|
||||||
|
|
||||||
|
namespace Imf {
|
||||||
|
diff --git a/3rdparty/openexr/IlmImf/ImfTiledMisc.cpp b/3rdparty/openexr/IlmImf/ImfTiledMisc.cpp
|
||||||
|
index 57f52f1..9588e78 100644
|
||||||
|
--- a/3rdparty/openexr/IlmImf/ImfTiledMisc.cpp
|
||||||
|
+++ b/3rdparty/openexr/IlmImf/ImfTiledMisc.cpp
|
||||||
|
@@ -43,6 +43,7 @@
|
||||||
|
#include "Iex.h"
|
||||||
|
#include <ImfMisc.h>
|
||||||
|
#include <ImfChannelList.h>
|
||||||
|
+#include <algorithm> // for std::max()
|
||||||
|
|
||||||
|
|
||||||
|
namespace Imf {
|
||||||
|
diff --git a/3rdparty/openexr/IlmImf/ImfTiledOutputFile.cpp b/3rdparty/openexr/IlmImf/ImfTiledOutputFile.cpp
|
||||||
|
index 0882106..0bc3cb3 100644
|
||||||
|
--- a/3rdparty/openexr/IlmImf/ImfTiledOutputFile.cpp
|
||||||
|
+++ b/3rdparty/openexr/IlmImf/ImfTiledOutputFile.cpp
|
||||||
|
@@ -63,6 +63,7 @@
|
||||||
|
#include <fstream>
|
||||||
|
#include <assert.h>
|
||||||
|
#include <map>
|
||||||
|
+#include <algorithm> // for std::max()
|
||||||
|
|
||||||
|
|
||||||
|
namespace Imf {
|
||||||
|
diff --git a/3rdparty/openexr/Imath/ImathMatrixAlgo.cpp b/3rdparty/openexr/Imath/ImathMatrixAlgo.cpp
|
||||||
|
index f0d2ed6..7ddc649 100644
|
||||||
|
--- a/3rdparty/openexr/Imath/ImathMatrixAlgo.cpp
|
||||||
|
+++ b/3rdparty/openexr/Imath/ImathMatrixAlgo.cpp
|
||||||
|
@@ -44,6 +44,7 @@
|
||||||
|
|
||||||
|
#include "ImathMatrixAlgo.h"
|
||||||
|
#include <cmath>
|
||||||
|
+#include <algorithm> // for std::max()
|
||||||
|
|
||||||
|
#if defined(OPENEXR_DLL)
|
||||||
|
#define EXPORT_CONST __declspec(dllexport)
|
||||||
Vendored
+26
-20
@@ -5,21 +5,26 @@ if (WIN32 AND NOT ARM)
|
|||||||
message(FATAL_ERROR "BUILD_TBB option supports Windows on ARM only!\nUse regular official TBB build instead of the BUILD_TBB option!")
|
message(FATAL_ERROR "BUILD_TBB option supports Windows on ARM only!\nUse regular official TBB build instead of the BUILD_TBB option!")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (WIN32 AND ARM)
|
set(tbb_ver "tbb43_20141204oss")
|
||||||
# 4.1 update 4 - The first release that supports Windows RT. Hangs on some Android devices
|
set(tbb_url "http://www.threadingbuildingblocks.org/sites/default/files/software_releases/source/tbb43_20141204oss_src.tgz")
|
||||||
set(tbb_ver "tbb41_20130613oss")
|
set(tbb_md5 "e903dd92d9433701f097fa7ca29a3c1f")
|
||||||
set(tbb_url "http://threadingbuildingblocks.org/sites/default/files/software_releases/source/tbb41_20130613oss_src.tgz")
|
set(tbb_version_file "version_string.ver")
|
||||||
set(tbb_md5 "108c8c1e481b0aaea61878289eb28b6a")
|
ocv_warnings_disable(CMAKE_CXX_FLAGS /wd4702)
|
||||||
set(tbb_version_file "version_string.ver")
|
ocv_warnings_disable(CMAKE_CXX_FLAGS -Wshadow)
|
||||||
ocv_warnings_disable(CMAKE_CXX_FLAGS /wd4702)
|
|
||||||
else()
|
# 4.1 update 4 - The first release that supports Windows RT. Hangs on some Android devices
|
||||||
# 4.1 update 2 - works fine
|
#set(tbb_ver "tbb41_20130613oss")
|
||||||
set(tbb_ver "tbb41_20130116oss")
|
#set(tbb_url "http://threadingbuildingblocks.org/sites/default/files/software_releases/source/tbb41_20130613oss_src.tgz")
|
||||||
set(tbb_url "http://threadingbuildingblocks.org/sites/default/files/software_releases/source/tbb41_20130116oss_src.tgz")
|
#set(tbb_md5 "108c8c1e481b0aaea61878289eb28b6a")
|
||||||
set(tbb_md5 "3809790e1001a1b32d59c9fee590ee85")
|
#set(tbb_version_file "version_string.ver")
|
||||||
set(tbb_version_file "version_string.ver")
|
#ocv_warnings_disable(CMAKE_CXX_FLAGS /wd4702)
|
||||||
ocv_warnings_disable(CMAKE_CXX_FLAGS -Wshadow)
|
|
||||||
endif()
|
# 4.1 update 2 - works fine
|
||||||
|
#set(tbb_ver "tbb41_20130116oss")
|
||||||
|
#set(tbb_url "http://threadingbuildingblocks.org/sites/default/files/software_releases/source/tbb41_20130116oss_src.tgz")
|
||||||
|
#set(tbb_md5 "3809790e1001a1b32d59c9fee590ee85")
|
||||||
|
#set(tbb_version_file "version_string.ver")
|
||||||
|
#ocv_warnings_disable(CMAKE_CXX_FLAGS -Wshadow)
|
||||||
|
|
||||||
# 4.1 update 3 dev - Hangs on some Android devices
|
# 4.1 update 3 dev - Hangs on some Android devices
|
||||||
#set(tbb_ver "tbb41_20130401oss")
|
#set(tbb_ver "tbb41_20130401oss")
|
||||||
@@ -113,7 +118,7 @@ if(NOT EXISTS "${tbb_tarball}")
|
|||||||
message(STATUS "Downloading ${tbb_ver}_src.tgz")
|
message(STATUS "Downloading ${tbb_ver}_src.tgz")
|
||||||
file(DOWNLOAD "${tbb_url}" "${tbb_tarball}" TIMEOUT 600 STATUS __statvar)
|
file(DOWNLOAD "${tbb_url}" "${tbb_tarball}" TIMEOUT 600 STATUS __statvar)
|
||||||
if(NOT __statvar EQUAL 0)
|
if(NOT __statvar EQUAL 0)
|
||||||
message(FATAL_ERROR "Failed to download TBB sources: ${tbb_url}")
|
message(FATAL_ERROR "Failed to download TBB sources (${__statvar}): ${tbb_url}")
|
||||||
endif()
|
endif()
|
||||||
getMD5("${tbb_tarball}" tbb_local_md5)
|
getMD5("${tbb_tarball}" tbb_local_md5)
|
||||||
if(NOT tbb_local_md5 STREQUAL tbb_md5)
|
if(NOT tbb_local_md5 STREQUAL tbb_md5)
|
||||||
@@ -169,6 +174,7 @@ if (WIN32)
|
|||||||
set(CMAKE_LINKER_FLAGS "${CMAKE_LINKER_FLAGS} /APPCONTAINER")
|
set(CMAKE_LINKER_FLAGS "${CMAKE_LINKER_FLAGS} /APPCONTAINER")
|
||||||
else()
|
else()
|
||||||
add_definitions(-D__TBB_DYNAMIC_LOAD_ENABLED=0 #required
|
add_definitions(-D__TBB_DYNAMIC_LOAD_ENABLED=0 #required
|
||||||
|
-D__TBB_WEAK_SYMBOLS_PRESENT=0 #required for 4.3
|
||||||
-D__TBB_BUILD=1 #required
|
-D__TBB_BUILD=1 #required
|
||||||
-D__TBB_SURVIVE_THREAD_SWITCH=0 #no cilk support
|
-D__TBB_SURVIVE_THREAD_SWITCH=0 #no cilk support
|
||||||
-DTBB_USE_DEBUG=0 #just to be sure
|
-DTBB_USE_DEBUG=0 #just to be sure
|
||||||
@@ -198,7 +204,7 @@ endif()
|
|||||||
|
|
||||||
set(TBB_SOURCE_FILES ${lib_srcs} ${lib_hdrs})
|
set(TBB_SOURCE_FILES ${lib_srcs} ${lib_hdrs})
|
||||||
|
|
||||||
if (ARM AND NOT WIN32)
|
if ((ARM OR AARCH64) AND NOT WIN32)
|
||||||
if (NOT ANDROID)
|
if (NOT ANDROID)
|
||||||
set(TBB_SOURCE_FILES ${TBB_SOURCE_FILES} "${CMAKE_CURRENT_SOURCE_DIR}/arm_linux_stub.cpp")
|
set(TBB_SOURCE_FILES ${TBB_SOURCE_FILES} "${CMAKE_CURRENT_SOURCE_DIR}/arm_linux_stub.cpp")
|
||||||
endif()
|
endif()
|
||||||
@@ -248,9 +254,9 @@ if(ENABLE_SOLUTION_FOLDERS)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
ocv_install_target(tbb EXPORT OpenCVModules
|
ocv_install_target(tbb EXPORT OpenCVModules
|
||||||
RUNTIME DESTINATION ${OPENCV_BIN_INSTALL_PATH} COMPONENT main
|
RUNTIME DESTINATION ${OPENCV_BIN_INSTALL_PATH} COMPONENT libs
|
||||||
LIBRARY DESTINATION ${OPENCV_LIB_INSTALL_PATH} COMPONENT main
|
LIBRARY DESTINATION ${OPENCV_LIB_INSTALL_PATH} COMPONENT libs
|
||||||
ARCHIVE DESTINATION ${OPENCV_3P_LIB_INSTALL_PATH} COMPONENT main
|
ARCHIVE DESTINATION ${OPENCV_3P_LIB_INSTALL_PATH} COMPONENT dev
|
||||||
)
|
)
|
||||||
|
|
||||||
# get TBB version
|
# get TBB version
|
||||||
|
|||||||
Vendored
+2
-2
@@ -82,7 +82,7 @@ if(UNIX)
|
|||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
ocv_warnings_disable(CMAKE_C_FLAGS -Wattributes -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations)
|
ocv_warnings_disable(CMAKE_C_FLAGS -Wshorten-64-to-32 -Wattributes -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations)
|
||||||
|
|
||||||
set_target_properties(${ZLIB_LIBRARY} PROPERTIES
|
set_target_properties(${ZLIB_LIBRARY} PROPERTIES
|
||||||
OUTPUT_NAME ${ZLIB_LIBRARY}
|
OUTPUT_NAME ${ZLIB_LIBRARY}
|
||||||
@@ -95,5 +95,5 @@ if(ENABLE_SOLUTION_FOLDERS)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(NOT BUILD_SHARED_LIBS)
|
if(NOT BUILD_SHARED_LIBS)
|
||||||
ocv_install_target(${ZLIB_LIBRARY} EXPORT OpenCVModules ARCHIVE DESTINATION ${OPENCV_3P_LIB_INSTALL_PATH} COMPONENT main)
|
ocv_install_target(${ZLIB_LIBRARY} EXPORT OpenCVModules ARCHIVE DESTINATION ${OPENCV_3P_LIB_INSTALL_PATH} COMPONENT dev)
|
||||||
endif()
|
endif()
|
||||||
|
|||||||
+169
-22
@@ -47,12 +47,24 @@ if(POLICY CMP0022)
|
|||||||
cmake_policy(SET CMP0022 OLD)
|
cmake_policy(SET CMP0022 OLD)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(POLICY CMP0026)
|
||||||
|
# silence cmake 3.0+ warnings about reading LOCATION attribute
|
||||||
|
cmake_policy(SET CMP0026 OLD)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (POLICY CMP0042)
|
||||||
|
# silence cmake 3.0+ warnings about MACOSX_RPATH
|
||||||
|
cmake_policy(SET CMP0042 OLD)
|
||||||
|
endif()
|
||||||
|
|
||||||
# must go before the project command
|
# must go before the project command
|
||||||
set(CMAKE_CONFIGURATION_TYPES "Debug;Release" CACHE STRING "Configs" FORCE)
|
set(CMAKE_CONFIGURATION_TYPES "Debug;Release" CACHE STRING "Configs" FORCE)
|
||||||
if(DEFINED CMAKE_BUILD_TYPE AND CMAKE_VERSION VERSION_GREATER "2.8")
|
if(DEFINED CMAKE_BUILD_TYPE AND CMAKE_VERSION VERSION_GREATER "2.8")
|
||||||
set_property( CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS ${CMAKE_CONFIGURATION_TYPES} )
|
set_property( CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS ${CMAKE_CONFIGURATION_TYPES} )
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
enable_testing()
|
||||||
|
|
||||||
project(OpenCV CXX C)
|
project(OpenCV CXX C)
|
||||||
|
|
||||||
if(MSVC)
|
if(MSVC)
|
||||||
@@ -127,21 +139,23 @@ endif()
|
|||||||
OCV_OPTION(WITH_1394 "Include IEEE1394 support" ON IF (NOT ANDROID AND NOT IOS) )
|
OCV_OPTION(WITH_1394 "Include IEEE1394 support" ON IF (NOT ANDROID AND NOT IOS) )
|
||||||
OCV_OPTION(WITH_AVFOUNDATION "Use AVFoundation for Video I/O" ON IF IOS)
|
OCV_OPTION(WITH_AVFOUNDATION "Use AVFoundation for Video I/O" ON IF IOS)
|
||||||
OCV_OPTION(WITH_CARBON "Use Carbon for UI instead of Cocoa" OFF IF APPLE )
|
OCV_OPTION(WITH_CARBON "Use Carbon for UI instead of Cocoa" OFF IF APPLE )
|
||||||
OCV_OPTION(WITH_CUDA "Include NVidia Cuda Runtime support" ON IF (CMAKE_VERSION VERSION_GREATER "2.8" AND NOT ANDROID AND NOT IOS) )
|
OCV_OPTION(WITH_CUDA "Include NVidia Cuda Runtime support" ON IF (CMAKE_VERSION VERSION_GREATER "2.8" AND NOT IOS) )
|
||||||
OCV_OPTION(WITH_CUFFT "Include NVidia Cuda Fast Fourier Transform (FFT) library support" ON IF (CMAKE_VERSION VERSION_GREATER "2.8" AND NOT ANDROID AND NOT IOS) )
|
OCV_OPTION(WITH_VTK "Include VTK library support (and build opencv_viz module eiher)" OFF IF (NOT ANDROID AND NOT IOS) )
|
||||||
OCV_OPTION(WITH_CUBLAS "Include NVidia Cuda Basic Linear Algebra Subprograms (BLAS) library support" OFF IF (CMAKE_VERSION VERSION_GREATER "2.8" AND NOT ANDROID AND NOT IOS) )
|
OCV_OPTION(WITH_CUFFT "Include NVidia Cuda Fast Fourier Transform (FFT) library support" ON IF (CMAKE_VERSION VERSION_GREATER "2.8" AND NOT IOS) )
|
||||||
|
OCV_OPTION(WITH_CUBLAS "Include NVidia Cuda Basic Linear Algebra Subprograms (BLAS) library support" OFF IF (CMAKE_VERSION VERSION_GREATER "2.8" AND NOT IOS) )
|
||||||
OCV_OPTION(WITH_NVCUVID "Include NVidia Video Decoding library support" OFF IF (CMAKE_VERSION VERSION_GREATER "2.8" AND NOT ANDROID AND NOT IOS AND NOT APPLE) )
|
OCV_OPTION(WITH_NVCUVID "Include NVidia Video Decoding library support" OFF IF (CMAKE_VERSION VERSION_GREATER "2.8" AND NOT ANDROID AND NOT IOS AND NOT APPLE) )
|
||||||
OCV_OPTION(WITH_EIGEN "Include Eigen2/Eigen3 support" ON)
|
OCV_OPTION(WITH_EIGEN "Include Eigen2/Eigen3 support" ON)
|
||||||
OCV_OPTION(WITH_VFW "Include Video for Windows support" ON IF WIN32 )
|
OCV_OPTION(WITH_VFW "Include Video for Windows support" ON IF WIN32 )
|
||||||
OCV_OPTION(WITH_FFMPEG "Include FFMPEG support" ON IF (NOT ANDROID AND NOT IOS))
|
OCV_OPTION(WITH_FFMPEG "Include FFMPEG support" ON IF (NOT ANDROID AND NOT IOS))
|
||||||
OCV_OPTION(WITH_GSTREAMER "Include Gstreamer support" ON IF (UNIX AND NOT APPLE AND NOT ANDROID) )
|
OCV_OPTION(WITH_GSTREAMER "Include Gstreamer support" ON IF (UNIX AND NOT ANDROID) )
|
||||||
|
OCV_OPTION(WITH_GSTREAMER_0_10 "Enable Gstreamer 0.10 support (instead of 1.x)" OFF )
|
||||||
OCV_OPTION(WITH_GTK "Include GTK support" ON IF (UNIX AND NOT APPLE AND NOT ANDROID) )
|
OCV_OPTION(WITH_GTK "Include GTK support" ON IF (UNIX AND NOT APPLE AND NOT ANDROID) )
|
||||||
OCV_OPTION(WITH_IMAGEIO "ImageIO support for OS X" OFF IF APPLE )
|
OCV_OPTION(WITH_IMAGEIO "ImageIO support for OS X" OFF IF APPLE )
|
||||||
OCV_OPTION(WITH_IPP "Include Intel IPP support" OFF IF (MSVC OR X86 OR X86_64) )
|
OCV_OPTION(WITH_IPP "Include Intel IPP support" OFF IF (MSVC OR X86 OR X86_64) )
|
||||||
OCV_OPTION(WITH_JASPER "Include JPEG2K support" ON IF (NOT IOS) )
|
OCV_OPTION(WITH_JASPER "Include JPEG2K support" ON IF (NOT IOS) )
|
||||||
OCV_OPTION(WITH_JPEG "Include JPEG support" ON)
|
OCV_OPTION(WITH_JPEG "Include JPEG support" ON)
|
||||||
OCV_OPTION(WITH_OPENEXR "Include ILM support via OpenEXR" ON IF (NOT IOS) )
|
OCV_OPTION(WITH_OPENEXR "Include ILM support via OpenEXR" ON IF (NOT IOS) )
|
||||||
OCV_OPTION(WITH_OPENGL "Include OpenGL support" OFF IF (NOT ANDROID AND NOT APPLE) )
|
OCV_OPTION(WITH_OPENGL "Include OpenGL support" OFF IF (NOT ANDROID) )
|
||||||
OCV_OPTION(WITH_OPENNI "Include OpenNI support" OFF IF (NOT ANDROID AND NOT IOS) )
|
OCV_OPTION(WITH_OPENNI "Include OpenNI support" OFF IF (NOT ANDROID AND NOT IOS) )
|
||||||
OCV_OPTION(WITH_PNG "Include PNG support" ON)
|
OCV_OPTION(WITH_PNG "Include PNG support" ON)
|
||||||
OCV_OPTION(WITH_PVAPI "Include Prosilica GigE support" ON IF (NOT ANDROID AND NOT IOS) )
|
OCV_OPTION(WITH_PVAPI "Include Prosilica GigE support" ON IF (NOT ANDROID AND NOT IOS) )
|
||||||
@@ -158,12 +172,12 @@ OCV_OPTION(WITH_V4L "Include Video 4 Linux support" ON
|
|||||||
OCV_OPTION(WITH_LIBV4L "Use libv4l for Video 4 Linux support" ON IF (UNIX AND NOT ANDROID) )
|
OCV_OPTION(WITH_LIBV4L "Use libv4l for Video 4 Linux support" ON IF (UNIX AND NOT ANDROID) )
|
||||||
OCV_OPTION(WITH_DSHOW "Build HighGUI with DirectShow support" ON IF (WIN32 AND NOT ARM) )
|
OCV_OPTION(WITH_DSHOW "Build HighGUI with DirectShow support" ON IF (WIN32 AND NOT ARM) )
|
||||||
OCV_OPTION(WITH_MSMF "Build HighGUI with Media Foundation support" OFF IF WIN32 )
|
OCV_OPTION(WITH_MSMF "Build HighGUI with Media Foundation support" OFF IF WIN32 )
|
||||||
OCV_OPTION(WITH_XIMEA "Include XIMEA cameras support" OFF IF (NOT ANDROID AND NOT APPLE) )
|
OCV_OPTION(WITH_XIMEA "Include XIMEA cameras support" OFF IF (NOT ANDROID) )
|
||||||
OCV_OPTION(WITH_XINE "Include Xine support (GPL)" OFF IF (UNIX AND NOT APPLE AND NOT ANDROID) )
|
OCV_OPTION(WITH_XINE "Include Xine support (GPL)" OFF IF (UNIX AND NOT APPLE AND NOT ANDROID) )
|
||||||
OCV_OPTION(WITH_OPENCL "Include OpenCL Runtime support" ON IF (NOT ANDROID AND NOT IOS) )
|
OCV_OPTION(WITH_OPENCL "Include OpenCL Runtime support" ON IF (NOT IOS) )
|
||||||
OCV_OPTION(WITH_OPENCLAMDFFT "Include AMD OpenCL FFT library support" ON IF (NOT ANDROID AND NOT IOS) )
|
OCV_OPTION(WITH_OPENCLAMDFFT "Include AMD OpenCL FFT library support" ON IF (NOT ANDROID AND NOT IOS) )
|
||||||
OCV_OPTION(WITH_OPENCLAMDBLAS "Include AMD OpenCL BLAS library support" ON IF (NOT ANDROID AND NOT IOS) )
|
OCV_OPTION(WITH_OPENCLAMDBLAS "Include AMD OpenCL BLAS library support" ON IF (NOT ANDROID AND NOT IOS) )
|
||||||
|
OCV_OPTION(WITH_INTELPERC "Include Intel Perceptual Computing support" OFF IF WIN32 )
|
||||||
|
|
||||||
# OpenCV build components
|
# OpenCV build components
|
||||||
# ===================================================
|
# ===================================================
|
||||||
@@ -180,6 +194,7 @@ OCV_OPTION(BUILD_WITH_STATIC_CRT "Enables use of staticaly linked CRT for sta
|
|||||||
OCV_OPTION(BUILD_FAT_JAVA_LIB "Create fat java wrapper containing the whole OpenCV library" ON IF NOT BUILD_SHARED_LIBS AND CMAKE_COMPILER_IS_GNUCXX )
|
OCV_OPTION(BUILD_FAT_JAVA_LIB "Create fat java wrapper containing the whole OpenCV library" ON IF NOT BUILD_SHARED_LIBS AND CMAKE_COMPILER_IS_GNUCXX )
|
||||||
OCV_OPTION(BUILD_ANDROID_SERVICE "Build OpenCV Manager for Google Play" OFF IF ANDROID AND ANDROID_SOURCE_TREE )
|
OCV_OPTION(BUILD_ANDROID_SERVICE "Build OpenCV Manager for Google Play" OFF IF ANDROID AND ANDROID_SOURCE_TREE )
|
||||||
OCV_OPTION(BUILD_ANDROID_PACKAGE "Build platform-specific package for Google Play" OFF IF ANDROID )
|
OCV_OPTION(BUILD_ANDROID_PACKAGE "Build platform-specific package for Google Play" OFF IF ANDROID )
|
||||||
|
OCV_OPTION(BUILD_TINY_GPU_MODULE "Build tiny gpu module with limited image format support" OFF )
|
||||||
|
|
||||||
# 3rd party libs
|
# 3rd party libs
|
||||||
OCV_OPTION(BUILD_ZLIB "Build zlib from source" WIN32 OR APPLE )
|
OCV_OPTION(BUILD_ZLIB "Build zlib from source" WIN32 OR APPLE )
|
||||||
@@ -197,13 +212,15 @@ OCV_OPTION(INSTALL_C_EXAMPLES "Install C examples" OFF )
|
|||||||
OCV_OPTION(INSTALL_PYTHON_EXAMPLES "Install Python examples" OFF )
|
OCV_OPTION(INSTALL_PYTHON_EXAMPLES "Install Python examples" OFF )
|
||||||
OCV_OPTION(INSTALL_ANDROID_EXAMPLES "Install Android examples" OFF IF ANDROID )
|
OCV_OPTION(INSTALL_ANDROID_EXAMPLES "Install Android examples" OFF IF ANDROID )
|
||||||
OCV_OPTION(INSTALL_TO_MANGLED_PATHS "Enables mangled install paths, that help with side by side installs." OFF IF (UNIX AND NOT ANDROID AND NOT IOS AND BUILD_SHARED_LIBS) )
|
OCV_OPTION(INSTALL_TO_MANGLED_PATHS "Enables mangled install paths, that help with side by side installs." OFF IF (UNIX AND NOT ANDROID AND NOT IOS AND BUILD_SHARED_LIBS) )
|
||||||
|
OCV_OPTION(INSTALL_TESTS "Install accuracy and performance test binaries and test data" OFF)
|
||||||
|
|
||||||
# OpenCV build options
|
# OpenCV build options
|
||||||
# ===================================================
|
# ===================================================
|
||||||
|
OCV_OPTION(ENABLE_DYNAMIC_CUDA "Enabled dynamic CUDA linkage" ON IF ANDROID )
|
||||||
OCV_OPTION(ENABLE_PRECOMPILED_HEADERS "Use precompiled headers" ON IF (NOT IOS) )
|
OCV_OPTION(ENABLE_PRECOMPILED_HEADERS "Use precompiled headers" ON IF (NOT IOS) )
|
||||||
OCV_OPTION(ENABLE_SOLUTION_FOLDERS "Solution folder in Visual Studio or in other IDEs" (MSVC_IDE OR CMAKE_GENERATOR MATCHES Xcode) IF (CMAKE_VERSION VERSION_GREATER "2.8.0") )
|
OCV_OPTION(ENABLE_SOLUTION_FOLDERS "Solution folder in Visual Studio or in other IDEs" (MSVC_IDE OR CMAKE_GENERATOR MATCHES Xcode) IF (CMAKE_VERSION VERSION_GREATER "2.8.0") )
|
||||||
OCV_OPTION(ENABLE_PROFILING "Enable profiling in the GCC compiler (Add flags: -g -pg)" OFF IF CMAKE_COMPILER_IS_GNUCXX )
|
OCV_OPTION(ENABLE_PROFILING "Enable profiling in the GCC compiler (Add flags: -g -pg)" OFF IF CMAKE_COMPILER_IS_GNUCXX )
|
||||||
|
OCV_OPTION(ENABLE_COVERAGE "Enable coverage collection with GCov" OFF IF CMAKE_COMPILER_IS_GNUCXX )
|
||||||
OCV_OPTION(ENABLE_OMIT_FRAME_POINTER "Enable -fomit-frame-pointer for GCC" ON IF CMAKE_COMPILER_IS_GNUCXX AND NOT (APPLE AND CMAKE_COMPILER_IS_CLANGCXX) )
|
OCV_OPTION(ENABLE_OMIT_FRAME_POINTER "Enable -fomit-frame-pointer for GCC" ON IF CMAKE_COMPILER_IS_GNUCXX AND NOT (APPLE AND CMAKE_COMPILER_IS_CLANGCXX) )
|
||||||
OCV_OPTION(ENABLE_POWERPC "Enable PowerPC for GCC" ON IF (CMAKE_COMPILER_IS_GNUCXX AND CMAKE_SYSTEM_PROCESSOR MATCHES powerpc.*) )
|
OCV_OPTION(ENABLE_POWERPC "Enable PowerPC for GCC" ON IF (CMAKE_COMPILER_IS_GNUCXX AND CMAKE_SYSTEM_PROCESSOR MATCHES powerpc.*) )
|
||||||
OCV_OPTION(ENABLE_FAST_MATH "Enable -ffast-math (not recommended for GCC 4.6.x)" OFF IF (CMAKE_COMPILER_IS_GNUCXX AND (X86 OR X86_64)) )
|
OCV_OPTION(ENABLE_FAST_MATH "Enable -ffast-math (not recommended for GCC 4.6.x)" OFF IF (CMAKE_COMPILER_IS_GNUCXX AND (X86 OR X86_64)) )
|
||||||
@@ -214,9 +231,17 @@ OCV_OPTION(ENABLE_SSSE3 "Enable SSSE3 instructions"
|
|||||||
OCV_OPTION(ENABLE_SSE41 "Enable SSE4.1 instructions" OFF IF ((CV_ICC OR CMAKE_COMPILER_IS_GNUCXX) AND (X86 OR X86_64)) )
|
OCV_OPTION(ENABLE_SSE41 "Enable SSE4.1 instructions" OFF IF ((CV_ICC OR CMAKE_COMPILER_IS_GNUCXX) AND (X86 OR X86_64)) )
|
||||||
OCV_OPTION(ENABLE_SSE42 "Enable SSE4.2 instructions" OFF IF (CMAKE_COMPILER_IS_GNUCXX AND (X86 OR X86_64)) )
|
OCV_OPTION(ENABLE_SSE42 "Enable SSE4.2 instructions" OFF IF (CMAKE_COMPILER_IS_GNUCXX AND (X86 OR X86_64)) )
|
||||||
OCV_OPTION(ENABLE_AVX "Enable AVX instructions" OFF IF ((MSVC OR CMAKE_COMPILER_IS_GNUCXX) AND (X86 OR X86_64)) )
|
OCV_OPTION(ENABLE_AVX "Enable AVX instructions" OFF IF ((MSVC OR CMAKE_COMPILER_IS_GNUCXX) AND (X86 OR X86_64)) )
|
||||||
|
OCV_OPTION(ENABLE_AVX2 "Enable AVX2 instructions" OFF IF ((MSVC OR CMAKE_COMPILER_IS_GNUCXX) AND (X86 OR X86_64)) )
|
||||||
|
OCV_OPTION(ENABLE_NEON "Enable NEON instructions" AARCH64 IF CMAKE_COMPILER_IS_GNUCXX AND (ARM OR AARCH64))
|
||||||
|
OCV_OPTION(ENABLE_VFPV3 "Enable VFPv3-D32 instructions" AARCH64 IF CMAKE_COMPILER_IS_GNUCXX AND (ARM OR AARCH64))
|
||||||
OCV_OPTION(ENABLE_NOISY_WARNINGS "Show all warnings even if they are too noisy" OFF )
|
OCV_OPTION(ENABLE_NOISY_WARNINGS "Show all warnings even if they are too noisy" OFF )
|
||||||
OCV_OPTION(OPENCV_WARNINGS_ARE_ERRORS "Treat warnings as errors" OFF )
|
OCV_OPTION(OPENCV_WARNINGS_ARE_ERRORS "Treat warnings as errors" OFF )
|
||||||
OCV_OPTION(ENABLE_WINRT_MODE "Build with Windows Runtime support" OFF IF WIN32 )
|
OCV_OPTION(ENABLE_WINRT_MODE "Build with Windows Runtime support" OFF IF WIN32 )
|
||||||
|
OCV_OPTION(ENABLE_WINRT_MODE_NATIVE "Build with Windows Runtime native C++ support" OFF IF WIN32 )
|
||||||
|
OCV_OPTION(ENABLE_LIBVS2013 "Build VS2013 with Visual Studio 2013 libraries" OFF IF WIN32 AND (MSVC_VERSION EQUAL 1800) )
|
||||||
|
OCV_OPTION(ENABLE_WINSDK81 "Build VS2013 with Windows 8.1 SDK" OFF IF WIN32 AND (MSVC_VERSION EQUAL 1800) )
|
||||||
|
OCV_OPTION(ENABLE_WINPHONESDK80 "Build with Windows Phone 8.0 SDK" OFF IF WIN32 AND (MSVC_VERSION EQUAL 1700) )
|
||||||
|
OCV_OPTION(ENABLE_WINPHONESDK81 "Build VS2013 with Windows Phone 8.1 SDK" OFF IF WIN32 AND (MSVC_VERSION EQUAL 1800) )
|
||||||
|
|
||||||
# uncategorized options
|
# uncategorized options
|
||||||
# ===================================================
|
# ===================================================
|
||||||
@@ -240,6 +265,15 @@ include(cmake/OpenCVVersion.cmake)
|
|||||||
# Save libs and executables in the same place
|
# Save libs and executables in the same place
|
||||||
set(EXECUTABLE_OUTPUT_PATH "${CMAKE_BINARY_DIR}/bin" CACHE PATH "Output directory for applications" )
|
set(EXECUTABLE_OUTPUT_PATH "${CMAKE_BINARY_DIR}/bin" CACHE PATH "Output directory for applications" )
|
||||||
|
|
||||||
|
if (ANDROID)
|
||||||
|
if (ANDROID_ABI MATCHES "NEON")
|
||||||
|
set(ENABLE_NEON ON)
|
||||||
|
endif()
|
||||||
|
if (ANDROID_ABI MATCHES "VFPV3")
|
||||||
|
set(ENABLE_VFPV3 ON)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
if(ANDROID OR WIN32)
|
if(ANDROID OR WIN32)
|
||||||
set(OPENCV_DOC_INSTALL_PATH doc)
|
set(OPENCV_DOC_INSTALL_PATH doc)
|
||||||
elseif(INSTALL_TO_MANGLED_PATHS)
|
elseif(INSTALL_TO_MANGLED_PATHS)
|
||||||
@@ -255,13 +289,27 @@ if(WIN32)
|
|||||||
message(STATUS "Can't detect runtime and/or arch")
|
message(STATUS "Can't detect runtime and/or arch")
|
||||||
set(OpenCV_INSTALL_BINARIES_PREFIX "")
|
set(OpenCV_INSTALL_BINARIES_PREFIX "")
|
||||||
endif()
|
endif()
|
||||||
|
elseif(ANDROID)
|
||||||
|
set(OpenCV_INSTALL_BINARIES_PREFIX "sdk/native/")
|
||||||
else()
|
else()
|
||||||
set(OpenCV_INSTALL_BINARIES_PREFIX "")
|
set(OpenCV_INSTALL_BINARIES_PREFIX "")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set(OPENCV_SAMPLES_BIN_INSTALL_PATH "${OpenCV_INSTALL_BINARIES_PREFIX}samples")
|
if(ANDROID)
|
||||||
|
set(OPENCV_SAMPLES_BIN_INSTALL_PATH "${OpenCV_INSTALL_BINARIES_PREFIX}samples/${ANDROID_NDK_ABI_NAME}")
|
||||||
|
else()
|
||||||
|
set(OPENCV_SAMPLES_BIN_INSTALL_PATH "${OpenCV_INSTALL_BINARIES_PREFIX}samples")
|
||||||
|
endif()
|
||||||
|
|
||||||
set(OPENCV_BIN_INSTALL_PATH "${OpenCV_INSTALL_BINARIES_PREFIX}bin")
|
if(ANDROID)
|
||||||
|
set(OPENCV_BIN_INSTALL_PATH "${OpenCV_INSTALL_BINARIES_PREFIX}bin/${ANDROID_NDK_ABI_NAME}")
|
||||||
|
else()
|
||||||
|
set(OPENCV_BIN_INSTALL_PATH "${OpenCV_INSTALL_BINARIES_PREFIX}bin")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(NOT OPENCV_TEST_INSTALL_PATH)
|
||||||
|
set(OPENCV_TEST_INSTALL_PATH "${OPENCV_BIN_INSTALL_PATH}")
|
||||||
|
endif()
|
||||||
|
|
||||||
if(ANDROID)
|
if(ANDROID)
|
||||||
set(LIBRARY_OUTPUT_PATH "${OpenCV_BINARY_DIR}/lib/${ANDROID_NDK_ABI_NAME}")
|
set(LIBRARY_OUTPUT_PATH "${OpenCV_BINARY_DIR}/lib/${ANDROID_NDK_ABI_NAME}")
|
||||||
@@ -270,6 +318,7 @@ if(ANDROID)
|
|||||||
set(OPENCV_3P_LIB_INSTALL_PATH sdk/native/3rdparty/libs/${ANDROID_NDK_ABI_NAME})
|
set(OPENCV_3P_LIB_INSTALL_PATH sdk/native/3rdparty/libs/${ANDROID_NDK_ABI_NAME})
|
||||||
set(OPENCV_CONFIG_INSTALL_PATH sdk/native/jni)
|
set(OPENCV_CONFIG_INSTALL_PATH sdk/native/jni)
|
||||||
set(OPENCV_INCLUDE_INSTALL_PATH sdk/native/jni/include)
|
set(OPENCV_INCLUDE_INSTALL_PATH sdk/native/jni/include)
|
||||||
|
set(OPENCV_SAMPLES_SRC_INSTALL_PATH samples/native)
|
||||||
else()
|
else()
|
||||||
set(LIBRARY_OUTPUT_PATH "${OpenCV_BINARY_DIR}/lib")
|
set(LIBRARY_OUTPUT_PATH "${OpenCV_BINARY_DIR}/lib")
|
||||||
set(3P_LIBRARY_OUTPUT_PATH "${OpenCV_BINARY_DIR}/3rdparty/lib${LIB_SUFFIX}")
|
set(3P_LIBRARY_OUTPUT_PATH "${OpenCV_BINARY_DIR}/3rdparty/lib${LIB_SUFFIX}")
|
||||||
@@ -280,9 +329,11 @@ else()
|
|||||||
set(OPENCV_LIB_INSTALL_PATH "${OpenCV_INSTALL_BINARIES_PREFIX}lib${LIB_SUFFIX}")
|
set(OPENCV_LIB_INSTALL_PATH "${OpenCV_INSTALL_BINARIES_PREFIX}lib${LIB_SUFFIX}")
|
||||||
endif()
|
endif()
|
||||||
set(OPENCV_3P_LIB_INSTALL_PATH "${OpenCV_INSTALL_BINARIES_PREFIX}staticlib${LIB_SUFFIX}")
|
set(OPENCV_3P_LIB_INSTALL_PATH "${OpenCV_INSTALL_BINARIES_PREFIX}staticlib${LIB_SUFFIX}")
|
||||||
|
set(OPENCV_SAMPLES_SRC_INSTALL_PATH samples/native)
|
||||||
else()
|
else()
|
||||||
set(OPENCV_LIB_INSTALL_PATH lib${LIB_SUFFIX})
|
set(OPENCV_LIB_INSTALL_PATH lib${LIB_SUFFIX})
|
||||||
set(OPENCV_3P_LIB_INSTALL_PATH share/OpenCV/3rdparty/${OPENCV_LIB_INSTALL_PATH})
|
set(OPENCV_3P_LIB_INSTALL_PATH share/OpenCV/3rdparty/${OPENCV_LIB_INSTALL_PATH})
|
||||||
|
set(OPENCV_SAMPLES_SRC_INSTALL_PATH share/OpenCV/samples)
|
||||||
endif()
|
endif()
|
||||||
set(OPENCV_INCLUDE_INSTALL_PATH "include")
|
set(OPENCV_INCLUDE_INSTALL_PATH "include")
|
||||||
|
|
||||||
@@ -402,6 +453,8 @@ if(UNIX)
|
|||||||
set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} dl m log)
|
set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} dl m log)
|
||||||
elseif(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD|NetBSD|DragonFly")
|
elseif(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD|NetBSD|DragonFly")
|
||||||
set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} m pthread)
|
set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} m pthread)
|
||||||
|
elseif(${CMAKE_SYSTEM_NAME} MATCHES "QNX")
|
||||||
|
set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} m)
|
||||||
else()
|
else()
|
||||||
set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} dl m pthread rt)
|
set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} dl m pthread rt)
|
||||||
endif()
|
endif()
|
||||||
@@ -413,6 +466,19 @@ endif()
|
|||||||
include(cmake/OpenCVPCHSupport.cmake)
|
include(cmake/OpenCVPCHSupport.cmake)
|
||||||
include(cmake/OpenCVModule.cmake)
|
include(cmake/OpenCVModule.cmake)
|
||||||
|
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
# Detect endianness of build platform
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
if(CMAKE_SYSTEM_NAME STREQUAL iOS)
|
||||||
|
# test_big_endian needs try_compile, which doesn't work for iOS
|
||||||
|
# http://public.kitware.com/Bug/view.php?id=12288
|
||||||
|
set(WORDS_BIGENDIAN 0)
|
||||||
|
else()
|
||||||
|
include(TestBigEndian)
|
||||||
|
test_big_endian(WORDS_BIGENDIAN)
|
||||||
|
endif()
|
||||||
|
|
||||||
# ----------------------------------------------------------------------------
|
# ----------------------------------------------------------------------------
|
||||||
# Detect 3rd-party libraries
|
# Detect 3rd-party libraries
|
||||||
# ----------------------------------------------------------------------------
|
# ----------------------------------------------------------------------------
|
||||||
@@ -422,14 +488,18 @@ include(cmake/OpenCVFindLibsGUI.cmake)
|
|||||||
include(cmake/OpenCVFindLibsVideo.cmake)
|
include(cmake/OpenCVFindLibsVideo.cmake)
|
||||||
include(cmake/OpenCVFindLibsPerf.cmake)
|
include(cmake/OpenCVFindLibsPerf.cmake)
|
||||||
|
|
||||||
|
|
||||||
# ----------------------------------------------------------------------------
|
# ----------------------------------------------------------------------------
|
||||||
# Detect other 3rd-party libraries/tools
|
# Detect other 3rd-party libraries/tools
|
||||||
# ----------------------------------------------------------------------------
|
# ----------------------------------------------------------------------------
|
||||||
|
|
||||||
# --- LATEX for pdf documentation ---
|
# --- LATEX for pdf documentation ---
|
||||||
|
unset(HAVE_DOXYGEN CACHE)
|
||||||
if(BUILD_DOCS)
|
if(BUILD_DOCS)
|
||||||
include(cmake/OpenCVFindLATEX.cmake)
|
include(cmake/OpenCVFindLATEX.cmake)
|
||||||
|
find_host_program(DOXYGEN_BUILD doxygen)
|
||||||
|
if (DOXYGEN_BUILD)
|
||||||
|
set(HAVE_DOXYGEN 1)
|
||||||
|
endif (DOXYGEN_BUILD)
|
||||||
endif(BUILD_DOCS)
|
endif(BUILD_DOCS)
|
||||||
|
|
||||||
# --- Python Support ---
|
# --- Python Support ---
|
||||||
@@ -458,10 +528,17 @@ if(WITH_OPENCL)
|
|||||||
include(cmake/OpenCVDetectOpenCL.cmake)
|
include(cmake/OpenCVDetectOpenCL.cmake)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
# --- VTK support ---
|
||||||
|
include(cmake/OpenCVDetectVTK.cmake)
|
||||||
|
|
||||||
# ----------------------------------------------------------------------------
|
# ----------------------------------------------------------------------------
|
||||||
# Add CUDA libraries (needed for apps/tools, samples)
|
# Add CUDA libraries (needed for apps/tools, samples)
|
||||||
# ----------------------------------------------------------------------------
|
# ----------------------------------------------------------------------------
|
||||||
if(HAVE_CUDA)
|
if(NOT HAVE_CUDA)
|
||||||
|
set(ENABLE_DYNAMIC_CUDA OFF)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(HAVE_CUDA AND NOT ENABLE_DYNAMIC_CUDA)
|
||||||
set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} ${CUDA_LIBRARIES} ${CUDA_npp_LIBRARY})
|
set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} ${CUDA_LIBRARIES} ${CUDA_npp_LIBRARY})
|
||||||
if(HAVE_CUBLAS)
|
if(HAVE_CUBLAS)
|
||||||
set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} ${CUDA_cublas_LIBRARY})
|
set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} ${CUDA_cublas_LIBRARY})
|
||||||
@@ -470,6 +547,7 @@ if(HAVE_CUDA)
|
|||||||
set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} ${CUDA_cufft_LIBRARY})
|
set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} ${CUDA_cufft_LIBRARY})
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# ----------------------------------------------------------------------------
|
# ----------------------------------------------------------------------------
|
||||||
# Solution folders:
|
# Solution folders:
|
||||||
# ----------------------------------------------------------------------------
|
# ----------------------------------------------------------------------------
|
||||||
@@ -540,6 +618,57 @@ include(cmake/OpenCVGenConfig.cmake)
|
|||||||
# Generate Info.plist for the IOS framework
|
# Generate Info.plist for the IOS framework
|
||||||
include(cmake/OpenCVGenInfoPlist.cmake)
|
include(cmake/OpenCVGenInfoPlist.cmake)
|
||||||
|
|
||||||
|
# Generate environment setup file
|
||||||
|
if(INSTALL_TESTS AND OPENCV_TEST_DATA_PATH)
|
||||||
|
if(ANDROID)
|
||||||
|
get_filename_component(TEST_PATH ${OPENCV_TEST_INSTALL_PATH} DIRECTORY)
|
||||||
|
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake/templates/opencv_run_all_tests_android.sh.in"
|
||||||
|
"${CMAKE_BINARY_DIR}/unix-install/opencv_run_all_tests.sh" @ONLY)
|
||||||
|
install(PROGRAMS "${CMAKE_BINARY_DIR}/unix-install/opencv_run_all_tests.sh"
|
||||||
|
DESTINATION . COMPONENT tests)
|
||||||
|
elseif(WIN32 OR UNIX)
|
||||||
|
set(OPENCV_PYTHON_TESTS_LIST "")
|
||||||
|
if(BUILD_opencv_python)
|
||||||
|
file(GLOB py_tests modules/python/test/*.py)
|
||||||
|
install(PROGRAMS ${py_tests} DESTINATION ${OPENCV_TEST_INSTALL_PATH} COMPONENT tests)
|
||||||
|
set(OPENCV_PYTHON_TESTS_LIST "test2.py")
|
||||||
|
endif()
|
||||||
|
if(WIN32)
|
||||||
|
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake/templates/opencv_run_all_tests_windows.cmd.in"
|
||||||
|
"${CMAKE_BINARY_DIR}/win-install/opencv_run_all_tests.cmd" @ONLY)
|
||||||
|
install(PROGRAMS "${CMAKE_BINARY_DIR}/win-install/opencv_run_all_tests.cmd"
|
||||||
|
DESTINATION ${OPENCV_TEST_INSTALL_PATH} COMPONENT tests)
|
||||||
|
else()
|
||||||
|
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake/templates/opencv_run_all_tests_unix.sh.in"
|
||||||
|
"${CMAKE_BINARY_DIR}/unix-install/opencv_run_all_tests.sh" @ONLY)
|
||||||
|
install(PROGRAMS "${CMAKE_BINARY_DIR}/unix-install/opencv_run_all_tests.sh"
|
||||||
|
DESTINATION ${OPENCV_TEST_INSTALL_PATH} COMPONENT tests)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(NOT OPENCV_README_FILE)
|
||||||
|
if(ANDROID)
|
||||||
|
set(OPENCV_README_FILE ${CMAKE_CURRENT_SOURCE_DIR}/platforms/android/README.android)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(NOT OPENCV_LICENSE_FILE)
|
||||||
|
set(OPENCV_LICENSE_FILE ${CMAKE_CURRENT_SOURCE_DIR}/LICENSE)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# for UNIX it does not make sense as LICENSE and readme will be part of the package automatically
|
||||||
|
if(ANDROID OR NOT UNIX)
|
||||||
|
install(FILES ${OPENCV_LICENSE_FILE}
|
||||||
|
PERMISSIONS OWNER_READ GROUP_READ WORLD_READ
|
||||||
|
DESTINATION . COMPONENT libs)
|
||||||
|
if(OPENCV_README_FILE)
|
||||||
|
install(FILES ${OPENCV_README_FILE}
|
||||||
|
PERMISSIONS OWNER_READ GROUP_READ WORLD_READ
|
||||||
|
DESTINATION . COMPONENT libs)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
# ----------------------------------------------------------------------------
|
# ----------------------------------------------------------------------------
|
||||||
# Summary:
|
# Summary:
|
||||||
# ----------------------------------------------------------------------------
|
# ----------------------------------------------------------------------------
|
||||||
@@ -649,9 +778,9 @@ endif()
|
|||||||
if(WIN32)
|
if(WIN32)
|
||||||
status("")
|
status("")
|
||||||
status(" Windows RT support:" HAVE_WINRT THEN YES ELSE NO)
|
status(" Windows RT support:" HAVE_WINRT THEN YES ELSE NO)
|
||||||
if (ENABLE_WINRT_MODE)
|
if (ENABLE_WINRT_MODE OR ENABLE_WINRT_MODE_NATIVE)
|
||||||
status(" Windows SDK v8.0:" ${WINDOWS_SDK_PATH})
|
status(" Windows (Phone) SDK v8.0/v8.1:" ${WINDOWS_SDK_PATH})
|
||||||
status(" Visual Studio 2012:" ${VISUAL_STUDIO_PATH})
|
status(" Visual Studio 2012/2013:" ${VISUAL_STUDIO_PATH})
|
||||||
endif()
|
endif()
|
||||||
endif(WIN32)
|
endif(WIN32)
|
||||||
|
|
||||||
@@ -687,6 +816,7 @@ else()
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
status(" OpenGL support:" HAVE_OPENGL THEN "YES (${OPENGL_LIBRARIES})" ELSE NO)
|
status(" OpenGL support:" HAVE_OPENGL THEN "YES (${OPENGL_LIBRARIES})" ELSE NO)
|
||||||
|
status(" VTK support:" HAVE_VTK THEN "YES (ver ${VTK_VERSION})" ELSE NO)
|
||||||
|
|
||||||
# ========================== MEDIA IO ==========================
|
# ========================== MEDIA IO ==========================
|
||||||
status("")
|
status("")
|
||||||
@@ -759,16 +889,19 @@ if(DEFINED WITH_FFMPEG)
|
|||||||
status(" format:" HAVE_FFMPEG_FORMAT THEN "YES (ver ${ALIASOF_libavformat_VERSION})" ELSE NO)
|
status(" format:" HAVE_FFMPEG_FORMAT THEN "YES (ver ${ALIASOF_libavformat_VERSION})" ELSE NO)
|
||||||
status(" util:" HAVE_FFMPEG_UTIL THEN "YES (ver ${ALIASOF_libavutil_VERSION})" ELSE NO)
|
status(" util:" HAVE_FFMPEG_UTIL THEN "YES (ver ${ALIASOF_libavutil_VERSION})" ELSE NO)
|
||||||
status(" swscale:" HAVE_FFMPEG_SWSCALE THEN "YES (ver ${ALIASOF_libswscale_VERSION})" ELSE NO)
|
status(" swscale:" HAVE_FFMPEG_SWSCALE THEN "YES (ver ${ALIASOF_libswscale_VERSION})" ELSE NO)
|
||||||
|
status(" resample:" HAVE_FFMPEG_RESAMPLE THEN "YES (ver ${ALIASOF_libavresample_VERSION})" ELSE NO)
|
||||||
status(" gentoo-style:" HAVE_GENTOO_FFMPEG THEN YES ELSE NO)
|
status(" gentoo-style:" HAVE_GENTOO_FFMPEG THEN YES ELSE NO)
|
||||||
endif(DEFINED WITH_FFMPEG)
|
endif(DEFINED WITH_FFMPEG)
|
||||||
|
|
||||||
if(DEFINED WITH_GSTREAMER)
|
if(DEFINED WITH_GSTREAMER)
|
||||||
status(" GStreamer:" HAVE_GSTREAMER THEN "" ELSE NO)
|
status(" GStreamer:" HAVE_GSTREAMER THEN "" ELSE NO)
|
||||||
if(HAVE_GSTREAMER)
|
if(HAVE_GSTREAMER)
|
||||||
status(" base:" "YES (ver ${ALIASOF_gstreamer-base-0.10_VERSION})")
|
status(" base:" "YES (ver ${GSTREAMER_BASE_VERSION})")
|
||||||
status(" app:" "YES (ver ${ALIASOF_gstreamer-app-0.10_VERSION})")
|
status(" video:" "YES (ver ${GSTREAMER_VIDEO_VERSION})")
|
||||||
status(" video:" "YES (ver ${ALIASOF_gstreamer-video-0.10_VERSION})")
|
status(" app:" "YES (ver ${GSTREAMER_APP_VERSION})")
|
||||||
endif()
|
status(" riff:" "YES (ver ${GSTREAMER_RIFF_VERSION})")
|
||||||
|
status(" pbutils:" "YES (ver ${GSTREAMER_PBUTILS_VERSION})")
|
||||||
|
endif(HAVE_GSTREAMER)
|
||||||
endif(DEFINED WITH_GSTREAMER)
|
endif(DEFINED WITH_GSTREAMER)
|
||||||
|
|
||||||
if(DEFINED WITH_OPENNI)
|
if(DEFINED WITH_OPENNI)
|
||||||
@@ -809,8 +942,9 @@ if(DEFINED WITH_V4L)
|
|||||||
else()
|
else()
|
||||||
set(HAVE_CAMV4L2_STR "NO")
|
set(HAVE_CAMV4L2_STR "NO")
|
||||||
endif()
|
endif()
|
||||||
status(" V4L/V4L2:" HAVE_LIBV4L THEN "Using libv4l (ver ${ALIASOF_libv4l1_VERSION})"
|
status(" V4L/V4L2:" HAVE_LIBV4L
|
||||||
ELSE "${HAVE_CAMV4L_STR}/${HAVE_CAMV4L2_STR}")
|
THEN "Using libv4l1 (ver ${ALIASOF_libv4l1_VERSION}) / libv4l2 (ver ${ALIASOF_libv4l2_VERSION})"
|
||||||
|
ELSE "${HAVE_CAMV4L_STR}/${HAVE_CAMV4L2_STR}")
|
||||||
endif(DEFINED WITH_V4L)
|
endif(DEFINED WITH_V4L)
|
||||||
|
|
||||||
if(DEFINED WITH_DSHOW)
|
if(DEFINED WITH_DSHOW)
|
||||||
@@ -829,6 +963,11 @@ if(DEFINED WITH_XINE)
|
|||||||
status(" Xine:" HAVE_XINE THEN "YES (ver ${ALIASOF_libxine_VERSION})" ELSE NO)
|
status(" Xine:" HAVE_XINE THEN "YES (ver ${ALIASOF_libxine_VERSION})" ELSE NO)
|
||||||
endif(DEFINED WITH_XINE)
|
endif(DEFINED WITH_XINE)
|
||||||
|
|
||||||
|
if(DEFINED WITH_INTELPERC)
|
||||||
|
status(" Intel PerC:" HAVE_INTELPERC THEN "YES" ELSE NO)
|
||||||
|
endif(DEFINED WITH_INTELPERC)
|
||||||
|
|
||||||
|
|
||||||
# ========================== Other third-party libraries ==========================
|
# ========================== Other third-party libraries ==========================
|
||||||
status("")
|
status("")
|
||||||
status(" Other third-party libraries:")
|
status(" Other third-party libraries:")
|
||||||
@@ -859,6 +998,7 @@ if(HAVE_CUDA)
|
|||||||
status(" NVIDIA GPU arch:" ${OPENCV_CUDA_ARCH_BIN})
|
status(" NVIDIA GPU arch:" ${OPENCV_CUDA_ARCH_BIN})
|
||||||
status(" NVIDIA PTX archs:" ${OPENCV_CUDA_ARCH_PTX})
|
status(" NVIDIA PTX archs:" ${OPENCV_CUDA_ARCH_PTX})
|
||||||
status(" Use fast math:" CUDA_FAST_MATH THEN YES ELSE NO)
|
status(" Use fast math:" CUDA_FAST_MATH THEN YES ELSE NO)
|
||||||
|
status(" Tiny gpu module:" BUILD_TINY_GPU_MODULE THEN YES ELSE NO)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(HAVE_OPENCL)
|
if(HAVE_OPENCL)
|
||||||
@@ -927,6 +1067,7 @@ if(BUILD_DOCS)
|
|||||||
endif()
|
endif()
|
||||||
status(" Sphinx:" HAVE_SPHINX THEN "${SPHINX_BUILD} (ver ${SPHINX_VERSION})" ELSE NO)
|
status(" Sphinx:" HAVE_SPHINX THEN "${SPHINX_BUILD} (ver ${SPHINX_VERSION})" ELSE NO)
|
||||||
status(" PdfLaTeX compiler:" PDFLATEX_COMPILER THEN "${PDFLATEX_COMPILER}" ELSE NO)
|
status(" PdfLaTeX compiler:" PDFLATEX_COMPILER THEN "${PDFLATEX_COMPILER}" ELSE NO)
|
||||||
|
status(" Doxygen:" HAVE_DOXYGEN THEN "YES (${DOXYGEN_BUILD})" ELSE NO)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# ========================== samples and tests ==========================
|
# ========================== samples and tests ==========================
|
||||||
@@ -952,3 +1093,9 @@ ocv_finalize_status()
|
|||||||
if("${CMAKE_CURRENT_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_BINARY_DIR}")
|
if("${CMAKE_CURRENT_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_BINARY_DIR}")
|
||||||
message(WARNING "The source directory is the same as binary directory. \"make clean\" may damage the source tree")
|
message(WARNING "The source directory is the same as binary directory. \"make clean\" may damage the source tree")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
# CPack stuff
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
include(cmake/OpenCVPackaging.cmake)
|
||||||
|
|||||||
@@ -1,16 +1,11 @@
|
|||||||
IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
|
By downloading, copying, installing or using the software you agree to this license.
|
||||||
|
If you do not agree to this license, do not download, install,
|
||||||
By downloading, copying, installing or using the software you agree to this license.
|
copy or use the software.
|
||||||
If you do not agree to this license, do not download, install,
|
|
||||||
copy or use the software.
|
|
||||||
|
|
||||||
|
|
||||||
License Agreement
|
License Agreement
|
||||||
For Open Source Computer Vision Library
|
For Open Source Computer Vision Library
|
||||||
|
(3-clause BSD License)
|
||||||
Copyright (C) 2000-2008, Intel Corporation, all rights reserved.
|
|
||||||
Copyright (C) 2008-2011, Willow Garage Inc., all rights reserved.
|
|
||||||
Third party copyrights are property of their respective owners.
|
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without modification,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
are permitted provided that the following conditions are met:
|
are permitted provided that the following conditions are met:
|
||||||
@@ -22,13 +17,14 @@ are permitted provided that the following conditions are met:
|
|||||||
this list of conditions and the following disclaimer in the documentation
|
this list of conditions and the following disclaimer in the documentation
|
||||||
and/or other materials provided with the distribution.
|
and/or other materials provided with the distribution.
|
||||||
|
|
||||||
* The name of the copyright holders may not be used to endorse or promote products
|
* Neither the names of the copyright holders nor the names of the contributors
|
||||||
derived from this software without specific prior written permission.
|
may be used to endorse or promote products derived from this software
|
||||||
|
without specific prior written permission.
|
||||||
|
|
||||||
This software is provided by the copyright holders and contributors "as is" and
|
This software is provided by the copyright holders and contributors "as is" and
|
||||||
any express or implied warranties, including, but not limited to, the implied
|
any express or implied warranties, including, but not limited to, the implied
|
||||||
warranties of merchantability and fitness for a particular purpose are disclaimed.
|
warranties of merchantability and fitness for a particular purpose are disclaimed.
|
||||||
In no event shall the Intel Corporation or contributors be liable for any direct,
|
In no event shall copyright holders or contributors be liable for any direct,
|
||||||
indirect, incidental, special, exemplary, or consequential damages
|
indirect, incidental, special, exemplary, or consequential damages
|
||||||
(including, but not limited to, procurement of substitute goods or services;
|
(including, but not limited to, procurement of substitute goods or services;
|
||||||
loss of use, data, or profits; or business interruption) however caused
|
loss of use, data, or profits; or business interruption) however caused
|
||||||
@@ -1,5 +1,7 @@
|
|||||||
### OpenCV: Open Source Computer Vision Library
|
### OpenCV: Open Source Computer Vision Library
|
||||||
|
|
||||||
|
[](https://www.gittip.com/OpenCV/)
|
||||||
|
|
||||||
#### Resources
|
#### Resources
|
||||||
|
|
||||||
* Homepage: <http://opencv.org>
|
* Homepage: <http://opencv.org>
|
||||||
@@ -18,6 +20,3 @@ Summary of guidelines:
|
|||||||
* Include tests and documentation;
|
* Include tests and documentation;
|
||||||
* Clean up "oops" commits before submitting;
|
* Clean up "oops" commits before submitting;
|
||||||
* Follow the coding style guide.
|
* Follow the coding style guide.
|
||||||
|
|
||||||
[](https://www.gittip.com/OpenCV/)
|
|
||||||
[](https://www.paypal.com/cgi-bin/webscr?item_name=Donation+to+OpenCV&cmd=_donations&business=accountant%40opencv.org)
|
|
||||||
@@ -2,3 +2,4 @@ link_libraries(${OPENCV_LINKER_LIBS})
|
|||||||
|
|
||||||
add_subdirectory(haartraining)
|
add_subdirectory(haartraining)
|
||||||
add_subdirectory(traincascade)
|
add_subdirectory(traincascade)
|
||||||
|
add_subdirectory(annotation)
|
||||||
|
|||||||
@@ -0,0 +1,36 @@
|
|||||||
|
SET(OPENCV_ANNOTATION_DEPS opencv_core opencv_highgui opencv_imgproc)
|
||||||
|
ocv_check_dependencies(${OPENCV_ANNOTATION_DEPS})
|
||||||
|
|
||||||
|
if(NOT OCV_DEPENDENCIES_FOUND)
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
project(annotation)
|
||||||
|
|
||||||
|
ocv_include_directories("${CMAKE_CURRENT_SOURCE_DIR}" "${OpenCV_SOURCE_DIR}/include/opencv")
|
||||||
|
ocv_include_modules(${OPENCV_ANNOTATION_DEPS})
|
||||||
|
|
||||||
|
set(annotation_files opencv_annotation.cpp)
|
||||||
|
set(the_target opencv_annotation)
|
||||||
|
|
||||||
|
add_executable(${the_target} ${annotation_files})
|
||||||
|
target_link_libraries(${the_target} ${OPENCV_ANNOTATION_DEPS})
|
||||||
|
|
||||||
|
set_target_properties(${the_target} PROPERTIES
|
||||||
|
DEBUG_POSTFIX "${OPENCV_DEBUG_POSTFIX}"
|
||||||
|
ARCHIVE_OUTPUT_DIRECTORY ${LIBRARY_OUTPUT_PATH}
|
||||||
|
RUNTIME_OUTPUT_DIRECTORY ${EXECUTABLE_OUTPUT_PATH}
|
||||||
|
INSTALL_NAME_DIR lib
|
||||||
|
OUTPUT_NAME "opencv_annotation")
|
||||||
|
|
||||||
|
if(ENABLE_SOLUTION_FOLDERS)
|
||||||
|
set_target_properties(${the_target} PROPERTIES FOLDER "applications")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(INSTALL_CREATE_DISTRIB)
|
||||||
|
if(BUILD_SHARED_LIBS)
|
||||||
|
install(TARGETS ${the_target} RUNTIME DESTINATION ${OPENCV_BIN_INSTALL_PATH} CONFIGURATIONS Release COMPONENT dev)
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
install(TARGETS ${the_target} RUNTIME DESTINATION ${OPENCV_BIN_INSTALL_PATH} COMPONENT dev)
|
||||||
|
endif()
|
||||||
@@ -0,0 +1,205 @@
|
|||||||
|
/*****************************************************************************************************
|
||||||
|
USAGE:
|
||||||
|
./opencv_annotation -images <folder location> -annotations <ouput file>
|
||||||
|
|
||||||
|
Created by: Puttemans Steven
|
||||||
|
*****************************************************************************************************/
|
||||||
|
|
||||||
|
#include <opencv2/core/core.hpp>
|
||||||
|
#include <opencv2/highgui/highgui.hpp>
|
||||||
|
#include <opencv2/imgproc/imgproc.hpp>
|
||||||
|
|
||||||
|
#include <fstream>
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
using namespace cv;
|
||||||
|
|
||||||
|
// Function prototypes
|
||||||
|
void on_mouse(int, int, int, int, void*);
|
||||||
|
string int2string(int);
|
||||||
|
void get_annotations(Mat, stringstream*);
|
||||||
|
|
||||||
|
// Public parameters
|
||||||
|
Mat image;
|
||||||
|
int roi_x0 = 0, roi_y0 = 0, roi_x1 = 0, roi_y1 = 0, num_of_rec = 0;
|
||||||
|
bool start_draw = false;
|
||||||
|
|
||||||
|
// Window name for visualisation purposes
|
||||||
|
const string window_name="OpenCV Based Annotation Tool";
|
||||||
|
|
||||||
|
// FUNCTION : Mouse response for selecting objects in images
|
||||||
|
// If left button is clicked, start drawing a rectangle as long as mouse moves
|
||||||
|
// Stop drawing once a new left click is detected by the on_mouse function
|
||||||
|
void on_mouse(int event, int x, int y, int , void * )
|
||||||
|
{
|
||||||
|
// Action when left button is clicked
|
||||||
|
if(event == CV_EVENT_LBUTTONDOWN)
|
||||||
|
{
|
||||||
|
if(!start_draw)
|
||||||
|
{
|
||||||
|
roi_x0 = x;
|
||||||
|
roi_y0 = y;
|
||||||
|
start_draw = true;
|
||||||
|
} else {
|
||||||
|
roi_x1 = x;
|
||||||
|
roi_y1 = y;
|
||||||
|
start_draw = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Action when mouse is moving
|
||||||
|
if((event == CV_EVENT_MOUSEMOVE) && start_draw)
|
||||||
|
{
|
||||||
|
// Redraw bounding box for annotation
|
||||||
|
Mat current_view;
|
||||||
|
image.copyTo(current_view);
|
||||||
|
rectangle(current_view, Point(roi_x0,roi_y0), Point(x,y), Scalar(0,0,255));
|
||||||
|
imshow(window_name, current_view);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// FUNCTION : snippet to convert an integer value to a string using a clean function
|
||||||
|
// instead of creating a stringstream each time inside the main code
|
||||||
|
string int2string(int num)
|
||||||
|
{
|
||||||
|
stringstream temp_stream;
|
||||||
|
temp_stream << num;
|
||||||
|
return temp_stream.str();
|
||||||
|
}
|
||||||
|
|
||||||
|
// FUNCTION : given an image containing positive object instances, add all the object
|
||||||
|
// annotations to a known stringstream
|
||||||
|
void get_annotations(Mat input_image, stringstream* output_stream)
|
||||||
|
{
|
||||||
|
// Make it possible to exit the annotation
|
||||||
|
bool stop = false;
|
||||||
|
|
||||||
|
// Reset the num_of_rec element at each iteration
|
||||||
|
// Make sure the global image is set to the current image
|
||||||
|
num_of_rec = 0;
|
||||||
|
image = input_image;
|
||||||
|
|
||||||
|
// Init window interface and couple mouse actions
|
||||||
|
namedWindow(window_name, WINDOW_AUTOSIZE);
|
||||||
|
setMouseCallback(window_name, on_mouse);
|
||||||
|
|
||||||
|
imshow(window_name, image);
|
||||||
|
stringstream temp_stream;
|
||||||
|
int key_pressed = 0;
|
||||||
|
|
||||||
|
do
|
||||||
|
{
|
||||||
|
// Keys for processing
|
||||||
|
// You need to select one for confirming a selection and one to continue to the next image
|
||||||
|
// Based on the universal ASCII code of the keystroke: http://www.asciitable.com/
|
||||||
|
// c = 99 add rectangle to current image
|
||||||
|
// n = 110 save added rectangles and show next image
|
||||||
|
// <ESC> = 27 exit program
|
||||||
|
key_pressed = 0xFF & waitKey(0);
|
||||||
|
switch( key_pressed )
|
||||||
|
{
|
||||||
|
case 27:
|
||||||
|
destroyWindow(window_name);
|
||||||
|
stop = true;
|
||||||
|
case 99:
|
||||||
|
// Add a rectangle to the list
|
||||||
|
num_of_rec++;
|
||||||
|
// Draw initiated from top left corner
|
||||||
|
if(roi_x0<roi_x1 && roi_y0<roi_y1)
|
||||||
|
{
|
||||||
|
temp_stream << " " << int2string(roi_x0) << " " << int2string(roi_y0) << " " << int2string(roi_x1-roi_x0) << " " << int2string(roi_y1-roi_y0);
|
||||||
|
}
|
||||||
|
// Draw initiated from bottom right corner
|
||||||
|
if(roi_x0>roi_x1 && roi_y0>roi_y1)
|
||||||
|
{
|
||||||
|
temp_stream << " " << int2string(roi_x1) << " " << int2string(roi_y1) << " " << int2string(roi_x0-roi_x1) << " " << int2string(roi_y0-roi_y1);
|
||||||
|
}
|
||||||
|
// Draw initiated from top right corner
|
||||||
|
if(roi_x0>roi_x1 && roi_y0<roi_y1)
|
||||||
|
{
|
||||||
|
temp_stream << " " << int2string(roi_x1) << " " << int2string(roi_y0) << " " << int2string(roi_x0-roi_x1) << " " << int2string(roi_y1-roi_y0);
|
||||||
|
}
|
||||||
|
// Draw initiated from bottom left corner
|
||||||
|
if(roi_x0<roi_x1 && roi_y0>roi_y1)
|
||||||
|
{
|
||||||
|
temp_stream << " " << int2string(roi_x0) << " " << int2string(roi_y1) << " " << int2string(roi_x1-roi_x0) << " " << int2string(roi_y0-roi_y1);
|
||||||
|
}
|
||||||
|
|
||||||
|
rectangle(input_image, Point(roi_x0,roi_y0), Point(roi_x1,roi_y1), Scalar(0,255,0), 1);
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if escape has been pressed
|
||||||
|
if(stop)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Continue as long as the next image key has not been pressed
|
||||||
|
while(key_pressed != 110);
|
||||||
|
|
||||||
|
// If there are annotations AND the next image key is pressed
|
||||||
|
// Write the image annotations to the file
|
||||||
|
if(num_of_rec>0 && key_pressed==110)
|
||||||
|
{
|
||||||
|
*output_stream << " " << num_of_rec << temp_stream.str() << endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Close down the window
|
||||||
|
destroyWindow(window_name);
|
||||||
|
}
|
||||||
|
|
||||||
|
int main( int argc, const char** argv )
|
||||||
|
{
|
||||||
|
// If no arguments are given, then supply some information on how this tool works
|
||||||
|
if( argc == 1 ){
|
||||||
|
cout << "Usage: " << argv[0] << endl;
|
||||||
|
cout << " -images <folder_location> [example - /data/testimages/]" << endl;
|
||||||
|
cout << " -annotations <ouput_file> [example - /data/annotations.txt]" << endl;
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Read in the input arguments
|
||||||
|
string image_folder;
|
||||||
|
string annotations;
|
||||||
|
for(int i = 1; i < argc; ++i )
|
||||||
|
{
|
||||||
|
if( !strcmp( argv[i], "-images" ) )
|
||||||
|
{
|
||||||
|
image_folder = argv[++i];
|
||||||
|
}
|
||||||
|
else if( !strcmp( argv[i], "-annotations" ) )
|
||||||
|
{
|
||||||
|
annotations = argv[++i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create the outputfilestream
|
||||||
|
ofstream output(annotations.c_str());
|
||||||
|
|
||||||
|
// Return the image filenames inside the image folder
|
||||||
|
vector<String> filenames;
|
||||||
|
String folder(image_folder);
|
||||||
|
glob(folder, filenames);
|
||||||
|
|
||||||
|
// Loop through each image stored in the images folder
|
||||||
|
// Create and temporarily store the annotations
|
||||||
|
// At the end write everything to the annotations file
|
||||||
|
for (size_t i = 0; i < filenames.size(); i++){
|
||||||
|
// Read in an image
|
||||||
|
Mat current_image = imread(filenames[i]);
|
||||||
|
|
||||||
|
// Perform annotations & generate corresponding output
|
||||||
|
stringstream output_stream;
|
||||||
|
get_annotations(current_image, &output_stream);
|
||||||
|
|
||||||
|
// Store the annotations, write to the output file
|
||||||
|
if (output_stream.str() != ""){
|
||||||
|
output << filenames[i] << output_stream.str();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
@@ -29,6 +29,9 @@ set(cvhaartraining_lib_src
|
|||||||
cvhaarclassifier.cpp
|
cvhaarclassifier.cpp
|
||||||
cvhaartraining.cpp
|
cvhaartraining.cpp
|
||||||
cvsamples.cpp
|
cvsamples.cpp
|
||||||
|
cvsamplesoutput.cpp
|
||||||
|
cvsamplesoutput.h
|
||||||
|
ioutput.h
|
||||||
)
|
)
|
||||||
|
|
||||||
add_library(opencv_haartraining_engine STATIC ${cvhaartraining_lib_src})
|
add_library(opencv_haartraining_engine STATIC ${cvhaartraining_lib_src})
|
||||||
@@ -71,14 +74,14 @@ set_target_properties(opencv_performance PROPERTIES
|
|||||||
|
|
||||||
if(INSTALL_CREATE_DISTRIB)
|
if(INSTALL_CREATE_DISTRIB)
|
||||||
if(BUILD_SHARED_LIBS)
|
if(BUILD_SHARED_LIBS)
|
||||||
install(TARGETS opencv_haartraining RUNTIME DESTINATION ${OPENCV_BIN_INSTALL_PATH} CONFIGURATIONS Release COMPONENT main)
|
install(TARGETS opencv_haartraining RUNTIME DESTINATION ${OPENCV_BIN_INSTALL_PATH} CONFIGURATIONS Release COMPONENT dev)
|
||||||
install(TARGETS opencv_createsamples RUNTIME DESTINATION ${OPENCV_BIN_INSTALL_PATH} CONFIGURATIONS Release COMPONENT main)
|
install(TARGETS opencv_createsamples RUNTIME DESTINATION ${OPENCV_BIN_INSTALL_PATH} CONFIGURATIONS Release COMPONENT dev)
|
||||||
install(TARGETS opencv_performance RUNTIME DESTINATION ${OPENCV_BIN_INSTALL_PATH} CONFIGURATIONS Release COMPONENT main)
|
install(TARGETS opencv_performance RUNTIME DESTINATION ${OPENCV_BIN_INSTALL_PATH} CONFIGURATIONS Release COMPONENT dev)
|
||||||
endif()
|
endif()
|
||||||
else()
|
else()
|
||||||
install(TARGETS opencv_haartraining RUNTIME DESTINATION ${OPENCV_BIN_INSTALL_PATH} COMPONENT main)
|
install(TARGETS opencv_haartraining RUNTIME DESTINATION ${OPENCV_BIN_INSTALL_PATH} COMPONENT dev)
|
||||||
install(TARGETS opencv_createsamples RUNTIME DESTINATION ${OPENCV_BIN_INSTALL_PATH} COMPONENT main)
|
install(TARGETS opencv_createsamples RUNTIME DESTINATION ${OPENCV_BIN_INSTALL_PATH} COMPONENT dev)
|
||||||
install(TARGETS opencv_performance RUNTIME DESTINATION ${OPENCV_BIN_INSTALL_PATH} COMPONENT main)
|
install(TARGETS opencv_performance RUNTIME DESTINATION ${OPENCV_BIN_INSTALL_PATH} COMPONENT dev)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(ENABLE_SOLUTION_FOLDERS)
|
if(ENABLE_SOLUTION_FOLDERS)
|
||||||
|
|||||||
@@ -50,10 +50,12 @@
|
|||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
#include <ctime>
|
#include <ctime>
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
#include "cvhaartraining.h"
|
#include "cvhaartraining.h"
|
||||||
|
#include "ioutput.h"
|
||||||
|
|
||||||
int main( int argc, char* argv[] )
|
int main( int argc, char* argv[] )
|
||||||
{
|
{
|
||||||
@@ -71,11 +73,12 @@ int main( int argc, char* argv[] )
|
|||||||
double maxxangle = 1.1;
|
double maxxangle = 1.1;
|
||||||
double maxyangle = 1.1;
|
double maxyangle = 1.1;
|
||||||
double maxzangle = 0.5;
|
double maxzangle = 0.5;
|
||||||
int showsamples = 0;
|
bool showsamples = false;
|
||||||
/* the samples are adjusted to this scale in the sample preview window */
|
/* the samples are adjusted to this scale in the sample preview window */
|
||||||
double scale = 4.0;
|
double scale = 4.0;
|
||||||
int width = 24;
|
int width = 24;
|
||||||
int height = 24;
|
int height = 24;
|
||||||
|
bool pngoutput = false; /* whether to make the samples in png or in jpg*/
|
||||||
|
|
||||||
srand((unsigned int)time(0));
|
srand((unsigned int)time(0));
|
||||||
|
|
||||||
@@ -92,7 +95,8 @@ int main( int argc, char* argv[] )
|
|||||||
" [-maxyangle <max_y_rotation_angle = %f>]\n"
|
" [-maxyangle <max_y_rotation_angle = %f>]\n"
|
||||||
" [-maxzangle <max_z_rotation_angle = %f>]\n"
|
" [-maxzangle <max_z_rotation_angle = %f>]\n"
|
||||||
" [-show [<scale = %f>]]\n"
|
" [-show [<scale = %f>]]\n"
|
||||||
" [-w <sample_width = %d>]\n [-h <sample_height = %d>]\n",
|
" [-w <sample_width = %d>]\n [-h <sample_height = %d>]\n"
|
||||||
|
" [-pngoutput]",
|
||||||
argv[0], num, bgcolor, bgthreshold, maxintensitydev,
|
argv[0], num, bgcolor, bgthreshold, maxintensitydev,
|
||||||
maxxangle, maxyangle, maxzangle, scale, width, height );
|
maxxangle, maxyangle, maxzangle, scale, width, height );
|
||||||
|
|
||||||
@@ -155,7 +159,7 @@ int main( int argc, char* argv[] )
|
|||||||
}
|
}
|
||||||
else if( !strcmp( argv[i], "-show" ) )
|
else if( !strcmp( argv[i], "-show" ) )
|
||||||
{
|
{
|
||||||
showsamples = 1;
|
showsamples = true;
|
||||||
if( i+1 < argc && strlen( argv[i+1] ) > 0 && argv[i+1][0] != '-' )
|
if( i+1 < argc && strlen( argv[i+1] ) > 0 && argv[i+1][0] != '-' )
|
||||||
{
|
{
|
||||||
double d;
|
double d;
|
||||||
@@ -172,6 +176,10 @@ int main( int argc, char* argv[] )
|
|||||||
{
|
{
|
||||||
height = atoi( argv[++i] );
|
height = atoi( argv[++i] );
|
||||||
}
|
}
|
||||||
|
else if( !strcmp( argv[i], "-pngoutput" ) )
|
||||||
|
{
|
||||||
|
pngoutput = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
printf( "Info file name: %s\n", ((infoname == NULL) ? nullname : infoname ) );
|
printf( "Info file name: %s\n", ((infoname == NULL) ? nullname : infoname ) );
|
||||||
@@ -190,10 +198,14 @@ int main( int argc, char* argv[] )
|
|||||||
printf( "Show samples: %s\n", (showsamples) ? "TRUE" : "FALSE" );
|
printf( "Show samples: %s\n", (showsamples) ? "TRUE" : "FALSE" );
|
||||||
if( showsamples )
|
if( showsamples )
|
||||||
{
|
{
|
||||||
printf( "Scale: %g\n", scale );
|
printf( "Scale applied to display : %g\n", scale );
|
||||||
|
}
|
||||||
|
if( !pngoutput)
|
||||||
|
{
|
||||||
|
printf( "Original image will be scaled to:\n");
|
||||||
|
printf( "\tWidth: $backgroundWidth / %d\n", width );
|
||||||
|
printf( "\tHeight: $backgroundHeight / %d\n", height );
|
||||||
}
|
}
|
||||||
printf( "Width: %d\n", width );
|
|
||||||
printf( "Height: %d\n", height );
|
|
||||||
|
|
||||||
/* determine action */
|
/* determine action */
|
||||||
if( imagename && vecname )
|
if( imagename && vecname )
|
||||||
@@ -207,13 +219,24 @@ int main( int argc, char* argv[] )
|
|||||||
|
|
||||||
printf( "Done\n" );
|
printf( "Done\n" );
|
||||||
}
|
}
|
||||||
else if( imagename && bgfilename && infoname )
|
else if( imagename && bgfilename && infoname)
|
||||||
{
|
{
|
||||||
printf( "Create test samples from single image applying distortions...\n" );
|
printf( "Create data set from single image applying distortions...\n"
|
||||||
|
"Output format: %s\n",
|
||||||
|
(( pngoutput ) ? "PNG" : "JPG") );
|
||||||
|
|
||||||
cvCreateTestSamples( infoname, imagename, bgcolor, bgthreshold, bgfilename, num,
|
std::auto_ptr<DatasetGenerator> creator;
|
||||||
invert, maxintensitydev,
|
if( pngoutput )
|
||||||
maxxangle, maxyangle, maxzangle, showsamples, width, height );
|
{
|
||||||
|
creator = std::auto_ptr<DatasetGenerator>( new PngDatasetGenerator( infoname ) );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
creator = std::auto_ptr<DatasetGenerator>( new JpgDatasetGenerator( infoname ) );
|
||||||
|
}
|
||||||
|
creator->create( imagename, bgcolor, bgthreshold, bgfilename, num,
|
||||||
|
invert, maxintensitydev, maxxangle, maxyangle, maxzangle,
|
||||||
|
showsamples, width, height );
|
||||||
|
|
||||||
printf( "Done\n" );
|
printf( "Done\n" );
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -338,7 +338,7 @@ typedef enum CvBoostType
|
|||||||
CV_LKCLASS = 5, /* classification (K class problem) */
|
CV_LKCLASS = 5, /* classification (K class problem) */
|
||||||
CV_LSREG = 6, /* least squares regression */
|
CV_LSREG = 6, /* least squares regression */
|
||||||
CV_LADREG = 7, /* least absolute deviation regression */
|
CV_LADREG = 7, /* least absolute deviation regression */
|
||||||
CV_MREG = 8, /* M-regression (Huber loss) */
|
CV_MREG = 8 /* M-regression (Huber loss) */
|
||||||
} CvBoostType;
|
} CvBoostType;
|
||||||
|
|
||||||
/****************************************************************************************\
|
/****************************************************************************************\
|
||||||
|
|||||||
@@ -48,6 +48,8 @@
|
|||||||
#include "cvhaartraining.h"
|
#include "cvhaartraining.h"
|
||||||
#include "_cvhaartraining.h"
|
#include "_cvhaartraining.h"
|
||||||
|
|
||||||
|
#include "ioutput.h"
|
||||||
|
|
||||||
#include <cstdio>
|
#include <cstdio>
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
@@ -2841,14 +2843,12 @@ void cvCreateTreeCascadeClassifier( const char* dirname,
|
|||||||
cvReleaseMat( &features_idx );
|
cvReleaseMat( &features_idx );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void cvCreateTrainingSamples( const char* filename,
|
void cvCreateTrainingSamples( const char* filename,
|
||||||
const char* imgfilename, int bgcolor, int bgthreshold,
|
const char* imgfilename, int bgcolor, int bgthreshold,
|
||||||
const char* bgfilename, int count,
|
const char* bgfilename, int count,
|
||||||
int invert, int maxintensitydev,
|
int invert, int maxintensitydev,
|
||||||
double maxxangle, double maxyangle, double maxzangle,
|
double maxxangle, double maxyangle, double maxzangle,
|
||||||
int showsamples,
|
bool showsamples,
|
||||||
int winwidth, int winheight )
|
int winwidth, int winheight )
|
||||||
{
|
{
|
||||||
CvSampleDistortionData data;
|
CvSampleDistortionData data;
|
||||||
@@ -2915,7 +2915,7 @@ void cvCreateTrainingSamples( const char* filename,
|
|||||||
cvShowImage( "Sample", &sample );
|
cvShowImage( "Sample", &sample );
|
||||||
if( cvWaitKey( 0 ) == 27 )
|
if( cvWaitKey( 0 ) == 27 )
|
||||||
{
|
{
|
||||||
showsamples = 0;
|
showsamples = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2942,45 +2942,43 @@ void cvCreateTrainingSamples( const char* filename,
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#define CV_INFO_FILENAME "info.dat"
|
DatasetGenerator::DatasetGenerator( IOutput* _writer )
|
||||||
|
:writer(_writer)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
void cvCreateTestSamples( const char* infoname,
|
void DatasetGenerator::showSamples(bool* show, CvMat *img) const
|
||||||
const char* imgfilename, int bgcolor, int bgthreshold,
|
{
|
||||||
const char* bgfilename, int count,
|
if( *show )
|
||||||
int invert, int maxintensitydev,
|
{
|
||||||
double maxxangle, double maxyangle, double maxzangle,
|
cvShowImage( "Image", img);
|
||||||
int showsamples,
|
if( cvWaitKey( 0 ) == 27 )
|
||||||
int winwidth, int winheight )
|
{
|
||||||
|
*show = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void DatasetGenerator::create(const char* imgfilename, int bgcolor, int bgthreshold,
|
||||||
|
const char* bgfilename, int count,
|
||||||
|
int invert, int maxintensitydev,
|
||||||
|
double maxxangle, double maxyangle, double maxzangle,
|
||||||
|
bool showsamples,
|
||||||
|
int winwidth, int winheight )
|
||||||
{
|
{
|
||||||
CvSampleDistortionData data;
|
CvSampleDistortionData data;
|
||||||
|
|
||||||
assert( infoname != NULL );
|
|
||||||
assert( imgfilename != NULL );
|
assert( imgfilename != NULL );
|
||||||
assert( bgfilename != NULL );
|
assert( bgfilename != NULL );
|
||||||
|
|
||||||
if( !icvMkDir( infoname ) )
|
|
||||||
{
|
|
||||||
|
|
||||||
#if CV_VERBOSE
|
|
||||||
fprintf( stderr, "Unable to create directory hierarchy: %s\n", infoname );
|
|
||||||
#endif /* CV_VERBOSE */
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if( icvStartSampleDistortion( imgfilename, bgcolor, bgthreshold, &data ) )
|
if( icvStartSampleDistortion( imgfilename, bgcolor, bgthreshold, &data ) )
|
||||||
{
|
{
|
||||||
char fullname[PATH_MAX];
|
|
||||||
char* filename;
|
|
||||||
CvMat win;
|
CvMat win;
|
||||||
FILE* info;
|
|
||||||
|
|
||||||
if( icvInitBackgroundReaders( bgfilename, cvSize( 10, 10 ) ) )
|
if( icvInitBackgroundReaders( bgfilename, cvSize( 10, 10 ) ) )
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
int x, y, width, height;
|
|
||||||
float scale;
|
|
||||||
float maxscale;
|
|
||||||
int inverse;
|
int inverse;
|
||||||
|
|
||||||
if( showsamples )
|
if( showsamples )
|
||||||
@@ -2988,73 +2986,112 @@ void cvCreateTestSamples( const char* infoname,
|
|||||||
cvNamedWindow( "Image", CV_WINDOW_AUTOSIZE );
|
cvNamedWindow( "Image", CV_WINDOW_AUTOSIZE );
|
||||||
}
|
}
|
||||||
|
|
||||||
info = fopen( infoname, "w" );
|
|
||||||
strcpy( fullname, infoname );
|
|
||||||
filename = strrchr( fullname, '\\' );
|
|
||||||
if( filename == NULL )
|
|
||||||
{
|
|
||||||
filename = strrchr( fullname, '/' );
|
|
||||||
}
|
|
||||||
if( filename == NULL )
|
|
||||||
{
|
|
||||||
filename = fullname;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
filename++;
|
|
||||||
}
|
|
||||||
|
|
||||||
count = MIN( count, cvbgdata->count );
|
count = MIN( count, cvbgdata->count );
|
||||||
inverse = invert;
|
inverse = invert;
|
||||||
|
|
||||||
for( i = 0; i < count; i++ )
|
for( i = 0; i < count; i++ )
|
||||||
{
|
{
|
||||||
icvGetNextFromBackgroundData( cvbgdata, cvbgreader );
|
icvGetNextFromBackgroundData( cvbgdata, cvbgreader );
|
||||||
|
|
||||||
maxscale = MIN( 0.7F * cvbgreader->src.cols / winwidth,
|
CvRect boundingBox = getObjectPosition( cvSize( cvbgreader->src.cols,
|
||||||
0.7F * cvbgreader->src.rows / winheight );
|
cvbgreader->src.rows ),
|
||||||
if( maxscale < 1.0F ) continue;
|
cvGetSize(data.img),
|
||||||
|
cvSize( winwidth, winheight ) );
|
||||||
|
if(boundingBox.width <= 0 || boundingBox.height <= 0)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
scale = (maxscale - 1.0F) * rand() / RAND_MAX + 1.0F;
|
cvGetSubArr( &cvbgreader->src, &win, boundingBox );
|
||||||
width = (int) (scale * winwidth);
|
|
||||||
height = (int) (scale * winheight);
|
|
||||||
x = (int) ((0.1+0.8 * rand()/RAND_MAX) * (cvbgreader->src.cols - width));
|
|
||||||
y = (int) ((0.1+0.8 * rand()/RAND_MAX) * (cvbgreader->src.rows - height));
|
|
||||||
|
|
||||||
cvGetSubArr( &cvbgreader->src, &win, cvRect( x, y ,width, height ) );
|
|
||||||
if( invert == CV_RANDOM_INVERT )
|
if( invert == CV_RANDOM_INVERT )
|
||||||
{
|
{
|
||||||
inverse = (rand() > (RAND_MAX/2));
|
inverse = (rand() > (RAND_MAX/2));
|
||||||
}
|
}
|
||||||
|
|
||||||
icvPlaceDistortedSample( &win, inverse, maxintensitydev,
|
icvPlaceDistortedSample( &win, inverse, maxintensitydev,
|
||||||
maxxangle, maxyangle, maxzangle,
|
maxxangle, maxyangle, maxzangle,
|
||||||
1, 0.0, 0.0, &data );
|
1, 0.0, 0.0, &data );
|
||||||
|
|
||||||
|
writer->write( cvbgreader->src, boundingBox );
|
||||||
|
|
||||||
sprintf( filename, "%04d_%04d_%04d_%04d_%04d.jpg",
|
showSamples(&showsamples, &cvbgreader->src);
|
||||||
(i + 1), x, y, width, height );
|
|
||||||
|
|
||||||
if( info )
|
|
||||||
{
|
|
||||||
fprintf( info, "%s %d %d %d %d %d\n",
|
|
||||||
filename, 1, x, y, width, height );
|
|
||||||
}
|
|
||||||
|
|
||||||
cvSaveImage( fullname, &cvbgreader->src );
|
|
||||||
if( showsamples )
|
|
||||||
{
|
|
||||||
cvShowImage( "Image", &cvbgreader->src );
|
|
||||||
if( cvWaitKey( 0 ) == 27 )
|
|
||||||
{
|
|
||||||
showsamples = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if( info ) fclose( info );
|
|
||||||
icvDestroyBackgroundReaders();
|
icvDestroyBackgroundReaders();
|
||||||
}
|
}
|
||||||
icvEndSampleDistortion( &data );
|
icvEndSampleDistortion( &data );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DatasetGenerator::~DatasetGenerator()
|
||||||
|
{
|
||||||
|
delete writer;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
JpgDatasetGenerator::JpgDatasetGenerator( const char* filename )
|
||||||
|
:DatasetGenerator( IOutput::createOutput( filename, IOutput::JPG_DATASET ) )
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
CvSize JpgDatasetGenerator::scaleObjectSize( const CvSize& bgImgSize,
|
||||||
|
const CvSize& ,
|
||||||
|
const CvSize& sampleSize) const
|
||||||
|
{
|
||||||
|
float scale;
|
||||||
|
float maxscale;
|
||||||
|
|
||||||
|
maxscale = MIN( 0.7F * bgImgSize.width / sampleSize.width,
|
||||||
|
0.7F * bgImgSize.height / sampleSize.height );
|
||||||
|
if( maxscale < 1.0F )
|
||||||
|
{
|
||||||
|
scale = -1.f;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
scale = (maxscale - 1.0F) * rand() / RAND_MAX + 1.0F;
|
||||||
|
}
|
||||||
|
|
||||||
|
int width = (int) (scale * sampleSize.width);
|
||||||
|
int height = (int) (scale * sampleSize.height);
|
||||||
|
|
||||||
|
return cvSize( width, height );
|
||||||
|
}
|
||||||
|
|
||||||
|
CvRect DatasetGenerator::getObjectPosition(const CvSize& bgImgSize,
|
||||||
|
const CvSize& imgSize,
|
||||||
|
const CvSize& sampleSize) const
|
||||||
|
{
|
||||||
|
CvSize size = scaleObjectSize( bgImgSize, imgSize, sampleSize );
|
||||||
|
|
||||||
|
int width = size.width;
|
||||||
|
int height = size.height;
|
||||||
|
int x = (int) ((0.1 + 0.8 * rand() / RAND_MAX) * (bgImgSize.width - width));
|
||||||
|
int y = (int) ((0.1 + 0.8 * rand() / RAND_MAX) * (bgImgSize.height - height));
|
||||||
|
|
||||||
|
return cvRect( x, y, width, height );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
PngDatasetGenerator::PngDatasetGenerator(const char* filename)
|
||||||
|
:DatasetGenerator( IOutput::createOutput( filename, IOutput::PNG_DATASET ) )
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
CvSize PngDatasetGenerator::scaleObjectSize( const CvSize& bgImgSize,
|
||||||
|
const CvSize& imgSize,
|
||||||
|
const CvSize& ) const
|
||||||
|
{
|
||||||
|
float scale;
|
||||||
|
|
||||||
|
scale = MIN( 0.3F * bgImgSize.width / imgSize.width,
|
||||||
|
0.3F * bgImgSize.height / imgSize.height );
|
||||||
|
|
||||||
|
|
||||||
|
int width = (int) (scale * imgSize.width);
|
||||||
|
int height = (int) (scale * imgSize.height);
|
||||||
|
|
||||||
|
return cvSize( width, height );
|
||||||
|
}
|
||||||
|
|
||||||
/* End of file. */
|
/* End of file. */
|
||||||
|
|||||||
@@ -48,6 +48,11 @@
|
|||||||
#ifndef _CVHAARTRAINING_H_
|
#ifndef _CVHAARTRAINING_H_
|
||||||
#define _CVHAARTRAINING_H_
|
#define _CVHAARTRAINING_H_
|
||||||
|
|
||||||
|
class IOutput;
|
||||||
|
struct CvRect;
|
||||||
|
struct CvSize;
|
||||||
|
struct CvMat;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* cvCreateTrainingSamples
|
* cvCreateTrainingSamples
|
||||||
*
|
*
|
||||||
@@ -74,23 +79,30 @@
|
|||||||
*/
|
*/
|
||||||
#define CV_RANDOM_INVERT 0x7FFFFFFF
|
#define CV_RANDOM_INVERT 0x7FFFFFFF
|
||||||
|
|
||||||
void cvCreateTrainingSamples( const char* filename,
|
void cvCreateTrainingSamples(const char* filename,
|
||||||
const char* imgfilename, int bgcolor, int bgthreshold,
|
const char* imgfilename, int bgcolor, int bgthreshold,
|
||||||
const char* bgfilename, int count,
|
const char* bgfilename, int count,
|
||||||
int invert = 0, int maxintensitydev = 40,
|
int invert = 0, int maxintensitydev = 40,
|
||||||
double maxxangle = 1.1,
|
double maxxangle = 1.1,
|
||||||
double maxyangle = 1.1,
|
double maxyangle = 1.1,
|
||||||
double maxzangle = 0.5,
|
double maxzangle = 0.5,
|
||||||
int showsamples = 0,
|
bool showsamples = false,
|
||||||
int winwidth = 24, int winheight = 24 );
|
int winwidth = 24, int winheight = 24 );
|
||||||
|
|
||||||
void cvCreateTestSamples( const char* infoname,
|
void cvCreatePngTrainingSet(const char* imgfilename, int bgcolor, int bgthreshold,
|
||||||
const char* imgfilename, int bgcolor, int bgthreshold,
|
const char* bgfilename, int count,
|
||||||
|
int invert, int maxintensitydev,
|
||||||
|
double maxxangle, double maxyangle, double maxzangle,
|
||||||
|
int winwidth, int winheight,
|
||||||
|
IOutput *writer );
|
||||||
|
|
||||||
|
void cvCreateTestSamples(const char* imgfilename, int bgcolor, int bgthreshold,
|
||||||
const char* bgfilename, int count,
|
const char* bgfilename, int count,
|
||||||
int invert, int maxintensitydev,
|
int invert, int maxintensitydev,
|
||||||
double maxxangle, double maxyangle, double maxzangle,
|
double maxxangle, double maxyangle, double maxzangle,
|
||||||
int showsamples,
|
int showsamples,
|
||||||
int winwidth, int winheight );
|
int winwidth, int winheight,
|
||||||
|
IOutput* writer);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* cvCreateTrainingSamplesFromInfo
|
* cvCreateTrainingSamplesFromInfo
|
||||||
@@ -189,4 +201,50 @@ void cvCreateTreeCascadeClassifier( const char* dirname,
|
|||||||
int boosttype, int stumperror,
|
int boosttype, int stumperror,
|
||||||
int maxtreesplits, int minpos, bool bg_vecfile = false );
|
int maxtreesplits, int minpos, bool bg_vecfile = false );
|
||||||
|
|
||||||
|
|
||||||
|
class DatasetGenerator
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
DatasetGenerator( IOutput* _writer );
|
||||||
|
void create( const char* imgfilename, int bgcolor, int bgthreshold,
|
||||||
|
const char* bgfilename, int count,
|
||||||
|
int invert, int maxintensitydev,
|
||||||
|
double maxxangle, double maxyangle, double maxzangle,
|
||||||
|
bool showsamples,
|
||||||
|
int winwidth, int winheight);
|
||||||
|
virtual ~DatasetGenerator();
|
||||||
|
private:
|
||||||
|
virtual void showSamples( bool* showSamples, CvMat* img ) const;
|
||||||
|
|
||||||
|
CvRect getObjectPosition( const CvSize& bgImgSize,
|
||||||
|
const CvSize& imgSize,
|
||||||
|
const CvSize& sampleSize ) const;
|
||||||
|
virtual CvSize scaleObjectSize(const CvSize& bgImgSize,
|
||||||
|
const CvSize& imgSize ,
|
||||||
|
const CvSize& sampleSize) const =0 ;
|
||||||
|
private:
|
||||||
|
IOutput* writer;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Provides the functionality of test set generating */
|
||||||
|
class JpgDatasetGenerator: public DatasetGenerator
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
JpgDatasetGenerator(const char* filename);
|
||||||
|
private:
|
||||||
|
CvSize scaleObjectSize(const CvSize& bgImgSize,
|
||||||
|
const CvSize& ,
|
||||||
|
const CvSize& sampleSize) const;
|
||||||
|
};
|
||||||
|
|
||||||
|
class PngDatasetGenerator: public DatasetGenerator
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
PngDatasetGenerator(const char *filename);
|
||||||
|
private:
|
||||||
|
CvSize scaleObjectSize(const CvSize& bgImgSize,
|
||||||
|
const CvSize& imgSize ,
|
||||||
|
const CvSize& ) const;
|
||||||
|
};
|
||||||
|
|
||||||
#endif /* _CVHAARTRAINING_H_ */
|
#endif /* _CVHAARTRAINING_H_ */
|
||||||
|
|||||||
@@ -0,0 +1,227 @@
|
|||||||
|
#include "cvsamplesoutput.h"
|
||||||
|
|
||||||
|
#include <cstdio>
|
||||||
|
|
||||||
|
#include "_cvcommon.h"
|
||||||
|
#include "highgui.h"
|
||||||
|
|
||||||
|
/* print statistic info */
|
||||||
|
#define CV_VERBOSE 1
|
||||||
|
|
||||||
|
IOutput::IOutput()
|
||||||
|
: currentIdx(0)
|
||||||
|
{}
|
||||||
|
|
||||||
|
void IOutput::findFilePathPart(char **partOfPath, char *fullPath)
|
||||||
|
{
|
||||||
|
*partOfPath = strrchr( fullPath, '\\' );
|
||||||
|
if( *partOfPath == NULL )
|
||||||
|
{
|
||||||
|
*partOfPath = strrchr( fullPath, '/' );
|
||||||
|
}
|
||||||
|
if( *partOfPath == NULL )
|
||||||
|
{
|
||||||
|
*partOfPath = fullPath;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*partOfPath += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
IOutput* IOutput::createOutput(const char *filename,
|
||||||
|
IOutput::OutputType type)
|
||||||
|
{
|
||||||
|
IOutput* output = 0;
|
||||||
|
switch (type) {
|
||||||
|
case IOutput::PNG_DATASET:
|
||||||
|
output = new PngDatasetOutput();
|
||||||
|
break;
|
||||||
|
case IOutput::JPG_DATASET:
|
||||||
|
output = new JpgDatasetOutput();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
#if CV_VERBOSE
|
||||||
|
fprintf( stderr, "Invalid output type, valid types are: PNG_TRAINING_SET, JPG_TEST_SET");
|
||||||
|
#endif /* CV_VERBOSE */
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( output->init( filename ) )
|
||||||
|
return output;
|
||||||
|
else
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool PngDatasetOutput::init( const char* annotationsListFileName )
|
||||||
|
{
|
||||||
|
IOutput::init( annotationsListFileName );
|
||||||
|
|
||||||
|
if(imgFileName == imgFullPath)
|
||||||
|
{
|
||||||
|
#if CV_VERBOSE
|
||||||
|
fprintf( stderr, "Invalid path to annotations file: %s\n"
|
||||||
|
"It should contain a parent directory name\n", imgFullPath );
|
||||||
|
#endif /* CV_VERBOSE */
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const char* annotationsdirname = "/annotations/";
|
||||||
|
const char* positivesdirname = "/pos/";
|
||||||
|
|
||||||
|
imgFileName[-1] = '\0'; //erase slash at the end of the path
|
||||||
|
imgFileName -= 1;
|
||||||
|
|
||||||
|
//copy path to dataset top-level dir
|
||||||
|
strcpy(annotationFullPath, imgFullPath);
|
||||||
|
//find the name of annotation starting from the top-level dataset dir
|
||||||
|
findFilePathPart(&annotationRelativePath, annotationFullPath);
|
||||||
|
if( !strcmp( annotationRelativePath, ".." ) || !strcmp( annotationRelativePath, "." ) )
|
||||||
|
{
|
||||||
|
#if CV_VERBOSE
|
||||||
|
fprintf( stderr, "Invalid path to annotations file: %s\n"
|
||||||
|
"It should contain a parent directory name\n", annotationsListFileName );
|
||||||
|
#endif /* CV_VERBOSE */
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
//find the name of output image starting from the top-level dataset dir
|
||||||
|
findFilePathPart(&imgRelativePath, imgFullPath);
|
||||||
|
annotationFileName = annotationFullPath + strlen(annotationFullPath);
|
||||||
|
|
||||||
|
sprintf(annotationFileName, "%s", annotationsdirname);
|
||||||
|
annotationFileName += strlen(annotationFileName);
|
||||||
|
sprintf(imgFileName, "%s", positivesdirname);
|
||||||
|
imgFileName += strlen(imgFileName);
|
||||||
|
|
||||||
|
if( !icvMkDir( annotationFullPath ) )
|
||||||
|
{
|
||||||
|
#if CV_VERBOSE
|
||||||
|
fprintf( stderr, "Unable to create directory hierarchy: %s\n", annotationFullPath );
|
||||||
|
#endif /* CV_VERBOSE */
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if( !icvMkDir( imgFullPath ) )
|
||||||
|
{
|
||||||
|
#if CV_VERBOSE
|
||||||
|
fprintf( stderr, "Unable to create directory hierarchy: %s\n", imgFullPath );
|
||||||
|
#endif /* CV_VERBOSE */
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool PngDatasetOutput::write( const CvMat& img,
|
||||||
|
const CvRect& boundingBox )
|
||||||
|
{
|
||||||
|
CvRect bbox = addBoundingboxBorder(boundingBox);
|
||||||
|
|
||||||
|
sprintf( imgFileName,
|
||||||
|
"%04d_%04d_%04d_%04d_%04d",
|
||||||
|
++currentIdx,
|
||||||
|
bbox.x,
|
||||||
|
bbox.y,
|
||||||
|
bbox.width,
|
||||||
|
bbox.height );
|
||||||
|
|
||||||
|
sprintf( annotationFileName, "%s.txt", imgFileName );
|
||||||
|
fprintf( annotationsList, "%s\n", annotationRelativePath );
|
||||||
|
|
||||||
|
FILE* annotationFile = fopen( annotationFullPath, "w" );
|
||||||
|
if(annotationFile == 0)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
sprintf( imgFileName + strlen(imgFileName), ".%s", extension );
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
fprintf( annotationFile,
|
||||||
|
"Image filename : \"%s\"\n"
|
||||||
|
"Bounding box for object 1 \"PASperson\" (Xmin, Ymin) - (Xmax, Ymax) : (%d, %d) - (%d, %d)",
|
||||||
|
imgRelativePath,
|
||||||
|
bbox.x,
|
||||||
|
bbox.y,
|
||||||
|
bbox.x + bbox.width,
|
||||||
|
bbox.y + bbox.height );
|
||||||
|
fclose( annotationFile );
|
||||||
|
|
||||||
|
cvSaveImage( imgFullPath, &img);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
CvRect PngDatasetOutput::addBoundingboxBorder(const CvRect& bbox) const
|
||||||
|
{
|
||||||
|
CvRect boundingBox = bbox;
|
||||||
|
int border = 5;
|
||||||
|
|
||||||
|
boundingBox.x -= border;
|
||||||
|
boundingBox.y -= border;
|
||||||
|
boundingBox.width += 2*border;
|
||||||
|
boundingBox.height += 2*border;
|
||||||
|
|
||||||
|
return boundingBox;
|
||||||
|
}
|
||||||
|
|
||||||
|
IOutput::~IOutput()
|
||||||
|
{
|
||||||
|
if(annotationsList)
|
||||||
|
{
|
||||||
|
fclose(annotationsList);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool IOutput::init(const char *filename)
|
||||||
|
{
|
||||||
|
assert( filename != NULL );
|
||||||
|
|
||||||
|
if( !icvMkDir( filename ) )
|
||||||
|
{
|
||||||
|
|
||||||
|
#if CV_VERBOSE
|
||||||
|
fprintf( stderr, "Unable to create directory hierarchy: %s\n", filename );
|
||||||
|
#endif /* CV_VERBOSE */
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
annotationsList = fopen( filename, "w" );
|
||||||
|
if( annotationsList == NULL )
|
||||||
|
{
|
||||||
|
#if CV_VERBOSE
|
||||||
|
fprintf( stderr, "Unable to create info file: %s\n", filename );
|
||||||
|
#endif /* CV_VERBOSE */
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
strcpy( imgFullPath, filename );
|
||||||
|
|
||||||
|
findFilePathPart( &imgFileName, imgFullPath );
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool JpgDatasetOutput::write( const CvMat& img,
|
||||||
|
const CvRect& boundingBox )
|
||||||
|
{
|
||||||
|
sprintf( imgFileName, "%04d_%04d_%04d_%04d_%04d.jpg",
|
||||||
|
++currentIdx,
|
||||||
|
boundingBox.x,
|
||||||
|
boundingBox.y,
|
||||||
|
boundingBox.width,
|
||||||
|
boundingBox.height );
|
||||||
|
|
||||||
|
fprintf( annotationsList, "%s %d %d %d %d %d\n",
|
||||||
|
imgFileName,
|
||||||
|
1,
|
||||||
|
boundingBox.x,
|
||||||
|
boundingBox.y,
|
||||||
|
boundingBox.width,
|
||||||
|
boundingBox.height );
|
||||||
|
|
||||||
|
cvSaveImage( imgFullPath, &img);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
@@ -0,0 +1,46 @@
|
|||||||
|
#ifndef CVSAMPLESOUTPUT_H
|
||||||
|
#define CVSAMPLESOUTPUT_H
|
||||||
|
|
||||||
|
#include "ioutput.h"
|
||||||
|
|
||||||
|
class PngDatasetOutput: public IOutput
|
||||||
|
{
|
||||||
|
friend IOutput* IOutput::createOutput(const char *filename, OutputType type);
|
||||||
|
public:
|
||||||
|
virtual bool write( const CvMat& img,
|
||||||
|
const CvRect& boundingBox);
|
||||||
|
|
||||||
|
virtual ~PngDatasetOutput(){}
|
||||||
|
private:
|
||||||
|
PngDatasetOutput()
|
||||||
|
: extension("png")
|
||||||
|
, destImgWidth(640)
|
||||||
|
, destImgHeight(480)
|
||||||
|
{}
|
||||||
|
|
||||||
|
virtual bool init(const char* annotationsListFileName );
|
||||||
|
|
||||||
|
CvRect addBoundingboxBorder(const CvRect& bbox) const;
|
||||||
|
private:
|
||||||
|
|
||||||
|
char annotationFullPath[PATH_MAX];
|
||||||
|
char* annotationFileName;
|
||||||
|
char* annotationRelativePath;
|
||||||
|
char* imgRelativePath;
|
||||||
|
const char* extension;
|
||||||
|
|
||||||
|
int destImgWidth;
|
||||||
|
int destImgHeight ;
|
||||||
|
};
|
||||||
|
|
||||||
|
class JpgDatasetOutput: public IOutput
|
||||||
|
{
|
||||||
|
friend IOutput* IOutput::createOutput(const char *filename, OutputType type);
|
||||||
|
public:
|
||||||
|
virtual bool write( const CvMat& img,
|
||||||
|
const CvRect& boundingBox );
|
||||||
|
virtual ~JpgDatasetOutput(){}
|
||||||
|
private:
|
||||||
|
JpgDatasetOutput(){}
|
||||||
|
};
|
||||||
|
#endif // CVSAMPLESOUTPUT_H
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
#ifndef IOUTPUT_H
|
||||||
|
#define IOUTPUT_H
|
||||||
|
|
||||||
|
#include <cstdio>
|
||||||
|
|
||||||
|
#include "_cvcommon.h"
|
||||||
|
|
||||||
|
struct CvMat;
|
||||||
|
struct CvRect;
|
||||||
|
|
||||||
|
class IOutput
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
enum OutputType {PNG_DATASET, JPG_DATASET};
|
||||||
|
public:
|
||||||
|
virtual bool write( const CvMat& img,
|
||||||
|
const CvRect& boundingBox ) =0;
|
||||||
|
|
||||||
|
virtual ~IOutput();
|
||||||
|
|
||||||
|
static IOutput* createOutput( const char *filename, OutputType type );
|
||||||
|
protected:
|
||||||
|
IOutput();
|
||||||
|
/* finds the beginning of the last token in the path */
|
||||||
|
void findFilePathPart( char **partOfPath, char *fullPath );
|
||||||
|
virtual bool init( const char* filename );
|
||||||
|
protected:
|
||||||
|
int currentIdx;
|
||||||
|
char imgFullPath[PATH_MAX];
|
||||||
|
char* imgFileName;
|
||||||
|
FILE* annotationsList;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // IOUTPUT_H
|
||||||
@@ -35,8 +35,8 @@ endif()
|
|||||||
|
|
||||||
if(INSTALL_CREATE_DISTRIB)
|
if(INSTALL_CREATE_DISTRIB)
|
||||||
if(BUILD_SHARED_LIBS)
|
if(BUILD_SHARED_LIBS)
|
||||||
install(TARGETS ${the_target} RUNTIME DESTINATION ${OPENCV_BIN_INSTALL_PATH} CONFIGURATIONS Release COMPONENT main)
|
install(TARGETS ${the_target} RUNTIME DESTINATION ${OPENCV_BIN_INSTALL_PATH} CONFIGURATIONS Release COMPONENT dev)
|
||||||
endif()
|
endif()
|
||||||
else()
|
else()
|
||||||
install(TARGETS ${the_target} RUNTIME DESTINATION ${OPENCV_BIN_INSTALL_PATH} COMPONENT main)
|
install(TARGETS ${the_target} RUNTIME DESTINATION ${OPENCV_BIN_INSTALL_PATH} COMPONENT dev)
|
||||||
endif()
|
endif()
|
||||||
|
|||||||
@@ -4,6 +4,8 @@
|
|||||||
#include "HOGfeatures.h"
|
#include "HOGfeatures.h"
|
||||||
#include "cascadeclassifier.h"
|
#include "cascadeclassifier.h"
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
using namespace cv;
|
||||||
|
|
||||||
CvHOGFeatureParams::CvHOGFeatureParams()
|
CvHOGFeatureParams::CvHOGFeatureParams()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -20,33 +20,33 @@ class CvHOGEvaluator : public CvFeatureEvaluator
|
|||||||
public:
|
public:
|
||||||
virtual ~CvHOGEvaluator() {}
|
virtual ~CvHOGEvaluator() {}
|
||||||
virtual void init(const CvFeatureParams *_featureParams,
|
virtual void init(const CvFeatureParams *_featureParams,
|
||||||
int _maxSampleCount, Size _winSize );
|
int _maxSampleCount, cv::Size _winSize );
|
||||||
virtual void setImage(const Mat& img, uchar clsLabel, int idx);
|
virtual void setImage(const cv::Mat& img, uchar clsLabel, int idx);
|
||||||
virtual float operator()(int varIdx, int sampleIdx) const;
|
virtual float operator()(int varIdx, int sampleIdx) const;
|
||||||
virtual void writeFeatures( FileStorage &fs, const Mat& featureMap ) const;
|
virtual void writeFeatures( cv::FileStorage &fs, const cv::Mat& featureMap ) const;
|
||||||
protected:
|
protected:
|
||||||
virtual void generateFeatures();
|
virtual void generateFeatures();
|
||||||
virtual void integralHistogram(const Mat &img, vector<Mat> &histogram, Mat &norm, int nbins) const;
|
virtual void integralHistogram(const cv::Mat &img, std::vector<cv::Mat> &histogram, cv::Mat &norm, int nbins) const;
|
||||||
class Feature
|
class Feature
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Feature();
|
Feature();
|
||||||
Feature( int offset, int x, int y, int cellW, int cellH );
|
Feature( int offset, int x, int y, int cellW, int cellH );
|
||||||
float calc( const vector<Mat> &_hists, const Mat &_normSum, size_t y, int featComponent ) const;
|
float calc( const std::vector<cv::Mat> &_hists, const cv::Mat &_normSum, size_t y, int featComponent ) const;
|
||||||
void write( FileStorage &fs ) const;
|
void write( cv::FileStorage &fs ) const;
|
||||||
void write( FileStorage &fs, int varIdx ) const;
|
void write( cv::FileStorage &fs, int varIdx ) const;
|
||||||
|
|
||||||
Rect rect[N_CELLS]; //cells
|
cv::Rect rect[N_CELLS]; //cells
|
||||||
|
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
int p0, p1, p2, p3;
|
int p0, p1, p2, p3;
|
||||||
} fastRect[N_CELLS];
|
} fastRect[N_CELLS];
|
||||||
};
|
};
|
||||||
vector<Feature> features;
|
std::vector<Feature> features;
|
||||||
|
|
||||||
Mat normSum; //for nomalization calculation (L1 or L2)
|
cv::Mat normSum; //for nomalization calculation (L1 or L2)
|
||||||
vector<Mat> hist;
|
std::vector<cv::Mat> hist;
|
||||||
};
|
};
|
||||||
|
|
||||||
inline float CvHOGEvaluator::operator()(int varIdx, int sampleIdx) const
|
inline float CvHOGEvaluator::operator()(int varIdx, int sampleIdx) const
|
||||||
@@ -57,7 +57,7 @@ inline float CvHOGEvaluator::operator()(int varIdx, int sampleIdx) const
|
|||||||
return features[featureIdx].calc( hist, normSum, sampleIdx, componentIdx);
|
return features[featureIdx].calc( hist, normSum, sampleIdx, componentIdx);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline float CvHOGEvaluator::Feature::calc( const vector<Mat>& _hists, const Mat& _normSum, size_t y, int featComponent ) const
|
inline float CvHOGEvaluator::Feature::calc( const std::vector<cv::Mat>& _hists, const cv::Mat& _normSum, size_t y, int featComponent ) const
|
||||||
{
|
{
|
||||||
float normFactor;
|
float normFactor;
|
||||||
float res;
|
float res;
|
||||||
|
|||||||
+47
-34
@@ -1,6 +1,19 @@
|
|||||||
#include "opencv2/core/core.hpp"
|
#include "opencv2/core/core.hpp"
|
||||||
#include "opencv2/core/internal.hpp"
|
#include "opencv2/core/internal.hpp"
|
||||||
|
|
||||||
|
using cv::Size;
|
||||||
|
using cv::Mat;
|
||||||
|
using cv::Point;
|
||||||
|
using cv::FileStorage;
|
||||||
|
using cv::Rect;
|
||||||
|
using cv::Ptr;
|
||||||
|
using cv::FileNode;
|
||||||
|
using cv::Mat_;
|
||||||
|
using cv::Range;
|
||||||
|
using cv::FileNodeIterator;
|
||||||
|
using cv::ParallelLoopBody;
|
||||||
|
|
||||||
|
|
||||||
#include "boost.h"
|
#include "boost.h"
|
||||||
#include "cascadeclassifier.h"
|
#include "cascadeclassifier.h"
|
||||||
#include <queue>
|
#include <queue>
|
||||||
@@ -160,10 +173,10 @@ CvCascadeBoostParams::CvCascadeBoostParams( int _boostType,
|
|||||||
|
|
||||||
void CvCascadeBoostParams::write( FileStorage &fs ) const
|
void CvCascadeBoostParams::write( FileStorage &fs ) const
|
||||||
{
|
{
|
||||||
String boostTypeStr = boost_type == CvBoost::DISCRETE ? CC_DISCRETE_BOOST :
|
string boostTypeStr = boost_type == CvBoost::DISCRETE ? CC_DISCRETE_BOOST :
|
||||||
boost_type == CvBoost::REAL ? CC_REAL_BOOST :
|
boost_type == CvBoost::REAL ? CC_REAL_BOOST :
|
||||||
boost_type == CvBoost::LOGIT ? CC_LOGIT_BOOST :
|
boost_type == CvBoost::LOGIT ? CC_LOGIT_BOOST :
|
||||||
boost_type == CvBoost::GENTLE ? CC_GENTLE_BOOST : String();
|
boost_type == CvBoost::GENTLE ? CC_GENTLE_BOOST : string();
|
||||||
CV_Assert( !boostTypeStr.empty() );
|
CV_Assert( !boostTypeStr.empty() );
|
||||||
fs << CC_BOOST_TYPE << boostTypeStr;
|
fs << CC_BOOST_TYPE << boostTypeStr;
|
||||||
fs << CC_MINHITRATE << minHitRate;
|
fs << CC_MINHITRATE << minHitRate;
|
||||||
@@ -175,7 +188,7 @@ void CvCascadeBoostParams::write( FileStorage &fs ) const
|
|||||||
|
|
||||||
bool CvCascadeBoostParams::read( const FileNode &node )
|
bool CvCascadeBoostParams::read( const FileNode &node )
|
||||||
{
|
{
|
||||||
String boostTypeStr;
|
string boostTypeStr;
|
||||||
FileNode rnode = node[CC_BOOST_TYPE];
|
FileNode rnode = node[CC_BOOST_TYPE];
|
||||||
rnode >> boostTypeStr;
|
rnode >> boostTypeStr;
|
||||||
boost_type = !boostTypeStr.compare( CC_DISCRETE_BOOST ) ? CvBoost::DISCRETE :
|
boost_type = !boostTypeStr.compare( CC_DISCRETE_BOOST ) ? CvBoost::DISCRETE :
|
||||||
@@ -213,10 +226,10 @@ void CvCascadeBoostParams::printDefaults() const
|
|||||||
|
|
||||||
void CvCascadeBoostParams::printAttrs() const
|
void CvCascadeBoostParams::printAttrs() const
|
||||||
{
|
{
|
||||||
String boostTypeStr = boost_type == CvBoost::DISCRETE ? CC_DISCRETE_BOOST :
|
string boostTypeStr = boost_type == CvBoost::DISCRETE ? CC_DISCRETE_BOOST :
|
||||||
boost_type == CvBoost::REAL ? CC_REAL_BOOST :
|
boost_type == CvBoost::REAL ? CC_REAL_BOOST :
|
||||||
boost_type == CvBoost::LOGIT ? CC_LOGIT_BOOST :
|
boost_type == CvBoost::LOGIT ? CC_LOGIT_BOOST :
|
||||||
boost_type == CvBoost::GENTLE ? CC_GENTLE_BOOST : String();
|
boost_type == CvBoost::GENTLE ? CC_GENTLE_BOOST : string();
|
||||||
CV_Assert( !boostTypeStr.empty() );
|
CV_Assert( !boostTypeStr.empty() );
|
||||||
cout << "boostType: " << boostTypeStr << endl;
|
cout << "boostType: " << boostTypeStr << endl;
|
||||||
cout << "minHitRate: " << minHitRate << endl;
|
cout << "minHitRate: " << minHitRate << endl;
|
||||||
@@ -226,7 +239,7 @@ void CvCascadeBoostParams::printAttrs() const
|
|||||||
cout << "maxWeakCount: " << weak_count << endl;
|
cout << "maxWeakCount: " << weak_count << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CvCascadeBoostParams::scanAttr( const String prmName, const String val)
|
bool CvCascadeBoostParams::scanAttr( const string prmName, const string val)
|
||||||
{
|
{
|
||||||
bool res = true;
|
bool res = true;
|
||||||
|
|
||||||
@@ -361,7 +374,7 @@ CvDTreeNode* CvCascadeBoostTrainData::subsample_data( const CvMat* _subsample_id
|
|||||||
if (is_buf_16u)
|
if (is_buf_16u)
|
||||||
{
|
{
|
||||||
unsigned short* udst_idx = (unsigned short*)(buf->data.s + root->buf_idx*get_length_subbuf() +
|
unsigned short* udst_idx = (unsigned short*)(buf->data.s + root->buf_idx*get_length_subbuf() +
|
||||||
vi*sample_count + data_root->offset);
|
(size_t)vi*sample_count + data_root->offset);
|
||||||
for( int i = 0; i < num_valid; i++ )
|
for( int i = 0; i < num_valid; i++ )
|
||||||
{
|
{
|
||||||
idx = src_idx[i];
|
idx = src_idx[i];
|
||||||
@@ -374,7 +387,7 @@ CvDTreeNode* CvCascadeBoostTrainData::subsample_data( const CvMat* _subsample_id
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
int* idst_idx = buf->data.i + root->buf_idx*get_length_subbuf() +
|
int* idst_idx = buf->data.i + root->buf_idx*get_length_subbuf() +
|
||||||
vi*sample_count + root->offset;
|
(size_t)vi*sample_count + root->offset;
|
||||||
for( int i = 0; i < num_valid; i++ )
|
for( int i = 0; i < num_valid; i++ )
|
||||||
{
|
{
|
||||||
idx = src_idx[i];
|
idx = src_idx[i];
|
||||||
@@ -391,14 +404,14 @@ CvDTreeNode* CvCascadeBoostTrainData::subsample_data( const CvMat* _subsample_id
|
|||||||
if (is_buf_16u)
|
if (is_buf_16u)
|
||||||
{
|
{
|
||||||
unsigned short* udst = (unsigned short*)(buf->data.s + root->buf_idx*get_length_subbuf() +
|
unsigned short* udst = (unsigned short*)(buf->data.s + root->buf_idx*get_length_subbuf() +
|
||||||
(workVarCount-1)*sample_count + root->offset);
|
(size_t)(workVarCount-1)*sample_count + root->offset);
|
||||||
for( int i = 0; i < count; i++ )
|
for( int i = 0; i < count; i++ )
|
||||||
udst[i] = (unsigned short)src_lbls[sidx[i]];
|
udst[i] = (unsigned short)src_lbls[sidx[i]];
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
int* idst = buf->data.i + root->buf_idx*get_length_subbuf() +
|
int* idst = buf->data.i + root->buf_idx*get_length_subbuf() +
|
||||||
(workVarCount-1)*sample_count + root->offset;
|
(size_t)(workVarCount-1)*sample_count + root->offset;
|
||||||
for( int i = 0; i < count; i++ )
|
for( int i = 0; i < count; i++ )
|
||||||
idst[i] = src_lbls[sidx[i]];
|
idst[i] = src_lbls[sidx[i]];
|
||||||
}
|
}
|
||||||
@@ -408,14 +421,14 @@ CvDTreeNode* CvCascadeBoostTrainData::subsample_data( const CvMat* _subsample_id
|
|||||||
if (is_buf_16u)
|
if (is_buf_16u)
|
||||||
{
|
{
|
||||||
unsigned short* sample_idx_dst = (unsigned short*)(buf->data.s + root->buf_idx*get_length_subbuf() +
|
unsigned short* sample_idx_dst = (unsigned short*)(buf->data.s + root->buf_idx*get_length_subbuf() +
|
||||||
workVarCount*sample_count + root->offset);
|
(size_t)workVarCount*sample_count + root->offset);
|
||||||
for( int i = 0; i < count; i++ )
|
for( int i = 0; i < count; i++ )
|
||||||
sample_idx_dst[i] = (unsigned short)sample_idx_src[sidx[i]];
|
sample_idx_dst[i] = (unsigned short)sample_idx_src[sidx[i]];
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
int* sample_idx_dst = buf->data.i + root->buf_idx*get_length_subbuf() +
|
int* sample_idx_dst = buf->data.i + root->buf_idx*get_length_subbuf() +
|
||||||
workVarCount*sample_count + root->offset;
|
(size_t)workVarCount*sample_count + root->offset;
|
||||||
for( int i = 0; i < count; i++ )
|
for( int i = 0; i < count; i++ )
|
||||||
sample_idx_dst[i] = sample_idx_src[sidx[i]];
|
sample_idx_dst[i] = sample_idx_src[sidx[i]];
|
||||||
}
|
}
|
||||||
@@ -601,9 +614,9 @@ void CvCascadeBoostTrainData::setData( const CvFeatureEvaluator* _featureEvaluat
|
|||||||
|
|
||||||
// set sample labels
|
// set sample labels
|
||||||
if (is_buf_16u)
|
if (is_buf_16u)
|
||||||
udst = (unsigned short*)(buf->data.s + work_var_count*sample_count);
|
udst = (unsigned short*)(buf->data.s + (size_t)work_var_count*sample_count);
|
||||||
else
|
else
|
||||||
idst = buf->data.i + work_var_count*sample_count;
|
idst = buf->data.i + (size_t)work_var_count*sample_count;
|
||||||
|
|
||||||
for (int si = 0; si < sample_count; si++)
|
for (int si = 0; si < sample_count; si++)
|
||||||
{
|
{
|
||||||
@@ -671,11 +684,11 @@ void CvCascadeBoostTrainData::get_ord_var_data( CvDTreeNode* n, int vi, float* o
|
|||||||
if ( vi < numPrecalcIdx )
|
if ( vi < numPrecalcIdx )
|
||||||
{
|
{
|
||||||
if( !is_buf_16u )
|
if( !is_buf_16u )
|
||||||
*sortedIndices = buf->data.i + n->buf_idx*get_length_subbuf() + vi*sample_count + n->offset;
|
*sortedIndices = buf->data.i + n->buf_idx*get_length_subbuf() + (size_t)vi*sample_count + n->offset;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
const unsigned short* shortIndices = (const unsigned short*)(buf->data.s + n->buf_idx*get_length_subbuf() +
|
const unsigned short* shortIndices = (const unsigned short*)(buf->data.s + n->buf_idx*get_length_subbuf() +
|
||||||
vi*sample_count + n->offset );
|
(size_t)vi*sample_count + n->offset );
|
||||||
for( int i = 0; i < nodeSampleCount; i++ )
|
for( int i = 0; i < nodeSampleCount; i++ )
|
||||||
sortedIndicesBuf[i] = shortIndices[i];
|
sortedIndicesBuf[i] = shortIndices[i];
|
||||||
|
|
||||||
@@ -786,14 +799,14 @@ struct FeatureIdxOnlyPrecalc : ParallelLoopBody
|
|||||||
{
|
{
|
||||||
valCachePtr[si] = (*featureEvaluator)( fi, si );
|
valCachePtr[si] = (*featureEvaluator)( fi, si );
|
||||||
if ( is_buf_16u )
|
if ( is_buf_16u )
|
||||||
*(udst + fi*sample_count + si) = (unsigned short)si;
|
*(udst + (size_t)fi*sample_count + si) = (unsigned short)si;
|
||||||
else
|
else
|
||||||
*(idst + fi*sample_count + si) = si;
|
*(idst + (size_t)fi*sample_count + si) = si;
|
||||||
}
|
}
|
||||||
if ( is_buf_16u )
|
if ( is_buf_16u )
|
||||||
icvSortUShAux( udst + fi*sample_count, sample_count, valCachePtr );
|
icvSortUShAux( udst + (size_t)fi*sample_count, sample_count, valCachePtr );
|
||||||
else
|
else
|
||||||
icvSortIntAux( idst + fi*sample_count, sample_count, valCachePtr );
|
icvSortIntAux( idst + (size_t)fi*sample_count, sample_count, valCachePtr );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const CvFeatureEvaluator* featureEvaluator;
|
const CvFeatureEvaluator* featureEvaluator;
|
||||||
@@ -822,14 +835,14 @@ struct FeatureValAndIdxPrecalc : ParallelLoopBody
|
|||||||
{
|
{
|
||||||
valCache->at<float>(fi,si) = (*featureEvaluator)( fi, si );
|
valCache->at<float>(fi,si) = (*featureEvaluator)( fi, si );
|
||||||
if ( is_buf_16u )
|
if ( is_buf_16u )
|
||||||
*(udst + fi*sample_count + si) = (unsigned short)si;
|
*(udst + (size_t)fi*sample_count + si) = (unsigned short)si;
|
||||||
else
|
else
|
||||||
*(idst + fi*sample_count + si) = si;
|
*(idst + (size_t)fi*sample_count + si) = si;
|
||||||
}
|
}
|
||||||
if ( is_buf_16u )
|
if ( is_buf_16u )
|
||||||
icvSortUShAux( udst + fi*sample_count, sample_count, valCache->ptr<float>(fi) );
|
icvSortUShAux( udst + (size_t)fi*sample_count, sample_count, valCache->ptr<float>(fi) );
|
||||||
else
|
else
|
||||||
icvSortIntAux( idst + fi*sample_count, sample_count, valCache->ptr<float>(fi) );
|
icvSortIntAux( idst + (size_t)fi*sample_count, sample_count, valCache->ptr<float>(fi) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const CvFeatureEvaluator* featureEvaluator;
|
const CvFeatureEvaluator* featureEvaluator;
|
||||||
@@ -1152,9 +1165,9 @@ void CvCascadeBoostTree::split_node_data( CvDTreeNode* node )
|
|||||||
if (data->is_buf_16u)
|
if (data->is_buf_16u)
|
||||||
{
|
{
|
||||||
unsigned short *ldst = (unsigned short *)(buf->data.s + left->buf_idx*length_buf_row +
|
unsigned short *ldst = (unsigned short *)(buf->data.s + left->buf_idx*length_buf_row +
|
||||||
(workVarCount-1)*scount + left->offset);
|
(size_t)(workVarCount-1)*scount + left->offset);
|
||||||
unsigned short *rdst = (unsigned short *)(buf->data.s + right->buf_idx*length_buf_row +
|
unsigned short *rdst = (unsigned short *)(buf->data.s + right->buf_idx*length_buf_row +
|
||||||
(workVarCount-1)*scount + right->offset);
|
(size_t)(workVarCount-1)*scount + right->offset);
|
||||||
|
|
||||||
for( int i = 0; i < n; i++ )
|
for( int i = 0; i < n; i++ )
|
||||||
{
|
{
|
||||||
@@ -1175,9 +1188,9 @@ void CvCascadeBoostTree::split_node_data( CvDTreeNode* node )
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
int *ldst = buf->data.i + left->buf_idx*length_buf_row +
|
int *ldst = buf->data.i + left->buf_idx*length_buf_row +
|
||||||
(workVarCount-1)*scount + left->offset;
|
(size_t)(workVarCount-1)*scount + left->offset;
|
||||||
int *rdst = buf->data.i + right->buf_idx*length_buf_row +
|
int *rdst = buf->data.i + right->buf_idx*length_buf_row +
|
||||||
(workVarCount-1)*scount + right->offset;
|
(size_t)(workVarCount-1)*scount + right->offset;
|
||||||
|
|
||||||
for( int i = 0; i < n; i++ )
|
for( int i = 0; i < n; i++ )
|
||||||
{
|
{
|
||||||
@@ -1205,9 +1218,9 @@ void CvCascadeBoostTree::split_node_data( CvDTreeNode* node )
|
|||||||
if (data->is_buf_16u)
|
if (data->is_buf_16u)
|
||||||
{
|
{
|
||||||
unsigned short* ldst = (unsigned short*)(buf->data.s + left->buf_idx*length_buf_row +
|
unsigned short* ldst = (unsigned short*)(buf->data.s + left->buf_idx*length_buf_row +
|
||||||
workVarCount*scount + left->offset);
|
(size_t)workVarCount*scount + left->offset);
|
||||||
unsigned short* rdst = (unsigned short*)(buf->data.s + right->buf_idx*length_buf_row +
|
unsigned short* rdst = (unsigned short*)(buf->data.s + right->buf_idx*length_buf_row +
|
||||||
workVarCount*scount + right->offset);
|
(size_t)workVarCount*scount + right->offset);
|
||||||
for (int i = 0; i < n; i++)
|
for (int i = 0; i < n; i++)
|
||||||
{
|
{
|
||||||
unsigned short idx = (unsigned short)tempBuf[i];
|
unsigned short idx = (unsigned short)tempBuf[i];
|
||||||
@@ -1226,9 +1239,9 @@ void CvCascadeBoostTree::split_node_data( CvDTreeNode* node )
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
int* ldst = buf->data.i + left->buf_idx*length_buf_row +
|
int* ldst = buf->data.i + left->buf_idx*length_buf_row +
|
||||||
workVarCount*scount + left->offset;
|
(size_t)workVarCount*scount + left->offset;
|
||||||
int* rdst = buf->data.i + right->buf_idx*length_buf_row +
|
int* rdst = buf->data.i + right->buf_idx*length_buf_row +
|
||||||
workVarCount*scount + right->offset;
|
(size_t)workVarCount*scount + right->offset;
|
||||||
for (int i = 0; i < n; i++)
|
for (int i = 0; i < n; i++)
|
||||||
{
|
{
|
||||||
int idx = tempBuf[i];
|
int idx = tempBuf[i];
|
||||||
@@ -1397,7 +1410,7 @@ void CvCascadeBoost::update_weights( CvBoostTree* tree )
|
|||||||
if (data->is_buf_16u)
|
if (data->is_buf_16u)
|
||||||
{
|
{
|
||||||
unsigned short* labels = (unsigned short*)(buf->data.s + data->data_root->buf_idx*length_buf_row +
|
unsigned short* labels = (unsigned short*)(buf->data.s + data->data_root->buf_idx*length_buf_row +
|
||||||
data->data_root->offset + (data->work_var_count-1)*data->sample_count);
|
data->data_root->offset + (size_t)(data->work_var_count-1)*data->sample_count);
|
||||||
for( int i = 0; i < n; i++ )
|
for( int i = 0; i < n; i++ )
|
||||||
{
|
{
|
||||||
// save original categorical responses {0,1}, convert them to {-1,1}
|
// save original categorical responses {0,1}, convert them to {-1,1}
|
||||||
@@ -1415,7 +1428,7 @@ void CvCascadeBoost::update_weights( CvBoostTree* tree )
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
int* labels = buf->data.i + data->data_root->buf_idx*length_buf_row +
|
int* labels = buf->data.i + data->data_root->buf_idx*length_buf_row +
|
||||||
data->data_root->offset + (data->work_var_count-1)*data->sample_count;
|
data->data_root->offset + (size_t)(data->work_var_count-1)*data->sample_count;
|
||||||
|
|
||||||
for( int i = 0; i < n; i++ )
|
for( int i = 0; i < n; i++ )
|
||||||
{
|
{
|
||||||
|
|||||||
+10
-10
@@ -13,11 +13,11 @@ struct CvCascadeBoostParams : CvBoostParams
|
|||||||
CvCascadeBoostParams( int _boostType, float _minHitRate, float _maxFalseAlarm,
|
CvCascadeBoostParams( int _boostType, float _minHitRate, float _maxFalseAlarm,
|
||||||
double _weightTrimRate, int _maxDepth, int _maxWeakCount );
|
double _weightTrimRate, int _maxDepth, int _maxWeakCount );
|
||||||
virtual ~CvCascadeBoostParams() {}
|
virtual ~CvCascadeBoostParams() {}
|
||||||
void write( FileStorage &fs ) const;
|
void write( cv::FileStorage &fs ) const;
|
||||||
bool read( const FileNode &node );
|
bool read( const cv::FileNode &node );
|
||||||
virtual void printDefaults() const;
|
virtual void printDefaults() const;
|
||||||
virtual void printAttrs() const;
|
virtual void printAttrs() const;
|
||||||
virtual bool scanAttr( const String prmName, const String val);
|
virtual bool scanAttr( const std::string prmName, const std::string val);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct CvCascadeBoostTrainData : CvDTreeTrainData
|
struct CvCascadeBoostTrainData : CvDTreeTrainData
|
||||||
@@ -45,7 +45,7 @@ struct CvCascadeBoostTrainData : CvDTreeTrainData
|
|||||||
virtual void free_train_data();
|
virtual void free_train_data();
|
||||||
|
|
||||||
const CvFeatureEvaluator* featureEvaluator;
|
const CvFeatureEvaluator* featureEvaluator;
|
||||||
Mat valCache; // precalculated feature values (CV_32FC1)
|
cv::Mat valCache; // precalculated feature values (CV_32FC1)
|
||||||
CvMat _resp; // for casting
|
CvMat _resp; // for casting
|
||||||
int numPrecalcVal, numPrecalcIdx;
|
int numPrecalcVal, numPrecalcIdx;
|
||||||
};
|
};
|
||||||
@@ -54,9 +54,9 @@ class CvCascadeBoostTree : public CvBoostTree
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
virtual CvDTreeNode* predict( int sampleIdx ) const;
|
virtual CvDTreeNode* predict( int sampleIdx ) const;
|
||||||
void write( FileStorage &fs, const Mat& featureMap );
|
void write( cv::FileStorage &fs, const cv::Mat& featureMap );
|
||||||
void read( const FileNode &node, CvBoost* _ensemble, CvDTreeTrainData* _data );
|
void read( const cv::FileNode &node, CvBoost* _ensemble, CvDTreeTrainData* _data );
|
||||||
void markFeaturesInMap( Mat& featureMap );
|
void markFeaturesInMap( cv::Mat& featureMap );
|
||||||
protected:
|
protected:
|
||||||
virtual void split_node_data( CvDTreeNode* n );
|
virtual void split_node_data( CvDTreeNode* n );
|
||||||
};
|
};
|
||||||
@@ -70,10 +70,10 @@ public:
|
|||||||
virtual float predict( int sampleIdx, bool returnSum = false ) const;
|
virtual float predict( int sampleIdx, bool returnSum = false ) const;
|
||||||
|
|
||||||
float getThreshold() const { return threshold; }
|
float getThreshold() const { return threshold; }
|
||||||
void write( FileStorage &fs, const Mat& featureMap ) const;
|
void write( cv::FileStorage &fs, const cv::Mat& featureMap ) const;
|
||||||
bool read( const FileNode &node, const CvFeatureEvaluator* _featureEvaluator,
|
bool read( const cv::FileNode &node, const CvFeatureEvaluator* _featureEvaluator,
|
||||||
const CvCascadeBoostParams& _params );
|
const CvCascadeBoostParams& _params );
|
||||||
void markUsedFeaturesInMap( Mat& featureMap );
|
void markUsedFeaturesInMap( cv::Mat& featureMap );
|
||||||
protected:
|
protected:
|
||||||
virtual bool set_params( const CvBoostParams& _params );
|
virtual bool set_params( const CvBoostParams& _params );
|
||||||
virtual void update_weights( CvBoostTree* tree );
|
virtual void update_weights( CvBoostTree* tree );
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
#include <queue>
|
#include <queue>
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
using namespace cv;
|
||||||
|
|
||||||
static const char* stageTypes[] = { CC_BOOST };
|
static const char* stageTypes[] = { CC_BOOST };
|
||||||
static const char* featureTypes[] = { CC_HAAR, CC_LBP, CC_HOG };
|
static const char* featureTypes[] = { CC_HAAR, CC_LBP, CC_HOG };
|
||||||
@@ -24,10 +25,10 @@ CvCascadeParams::CvCascadeParams( int _stageType, int _featureType ) : stageType
|
|||||||
|
|
||||||
void CvCascadeParams::write( FileStorage &fs ) const
|
void CvCascadeParams::write( FileStorage &fs ) const
|
||||||
{
|
{
|
||||||
String stageTypeStr = stageType == BOOST ? CC_BOOST : String();
|
string stageTypeStr = stageType == BOOST ? CC_BOOST : string();
|
||||||
CV_Assert( !stageTypeStr.empty() );
|
CV_Assert( !stageTypeStr.empty() );
|
||||||
fs << CC_STAGE_TYPE << stageTypeStr;
|
fs << CC_STAGE_TYPE << stageTypeStr;
|
||||||
String featureTypeStr = featureType == CvFeatureParams::HAAR ? CC_HAAR :
|
string featureTypeStr = featureType == CvFeatureParams::HAAR ? CC_HAAR :
|
||||||
featureType == CvFeatureParams::LBP ? CC_LBP :
|
featureType == CvFeatureParams::LBP ? CC_LBP :
|
||||||
featureType == CvFeatureParams::HOG ? CC_HOG :
|
featureType == CvFeatureParams::HOG ? CC_HOG :
|
||||||
0;
|
0;
|
||||||
@@ -41,7 +42,7 @@ bool CvCascadeParams::read( const FileNode &node )
|
|||||||
{
|
{
|
||||||
if ( node.empty() )
|
if ( node.empty() )
|
||||||
return false;
|
return false;
|
||||||
String stageTypeStr, featureTypeStr;
|
string stageTypeStr, featureTypeStr;
|
||||||
FileNode rnode = node[CC_STAGE_TYPE];
|
FileNode rnode = node[CC_STAGE_TYPE];
|
||||||
if ( !rnode.isString() )
|
if ( !rnode.isString() )
|
||||||
return false;
|
return false;
|
||||||
@@ -96,7 +97,7 @@ void CvCascadeParams::printAttrs() const
|
|||||||
cout << "sampleHeight: " << winSize.height << endl;
|
cout << "sampleHeight: " << winSize.height << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CvCascadeParams::scanAttr( const String prmName, const String val )
|
bool CvCascadeParams::scanAttr( const string prmName, const string val )
|
||||||
{
|
{
|
||||||
bool res = true;
|
bool res = true;
|
||||||
if( !prmName.compare( "-stageType" ) )
|
if( !prmName.compare( "-stageType" ) )
|
||||||
@@ -126,17 +127,21 @@ bool CvCascadeParams::scanAttr( const String prmName, const String val )
|
|||||||
|
|
||||||
//---------------------------- CascadeClassifier --------------------------------------
|
//---------------------------- CascadeClassifier --------------------------------------
|
||||||
|
|
||||||
bool CvCascadeClassifier::train( const String _cascadeDirName,
|
bool CvCascadeClassifier::train( const string _cascadeDirName,
|
||||||
const String _posFilename,
|
const string _posFilename,
|
||||||
const String _negFilename,
|
const string _negFilename,
|
||||||
int _numPos, int _numNeg,
|
int _numPos, int _numNeg,
|
||||||
int _precalcValBufSize, int _precalcIdxBufSize,
|
int _precalcValBufSize, int _precalcIdxBufSize,
|
||||||
int _numStages,
|
int _numStages,
|
||||||
const CvCascadeParams& _cascadeParams,
|
const CvCascadeParams& _cascadeParams,
|
||||||
const CvFeatureParams& _featureParams,
|
const CvFeatureParams& _featureParams,
|
||||||
const CvCascadeBoostParams& _stageParams,
|
const CvCascadeBoostParams& _stageParams,
|
||||||
bool baseFormatSave )
|
bool baseFormatSave,
|
||||||
|
double acceptanceRatioBreakValue)
|
||||||
{
|
{
|
||||||
|
// Start recording clock ticks for training time output
|
||||||
|
const clock_t begin_time = clock();
|
||||||
|
|
||||||
if( _cascadeDirName.empty() || _posFilename.empty() || _negFilename.empty() )
|
if( _cascadeDirName.empty() || _posFilename.empty() || _negFilename.empty() )
|
||||||
CV_Error( CV_StsBadArg, "_cascadeDirName or _bgfileName or _vecFileName is NULL" );
|
CV_Error( CV_StsBadArg, "_cascadeDirName or _bgfileName or _vecFileName is NULL" );
|
||||||
|
|
||||||
@@ -165,6 +170,13 @@ bool CvCascadeClassifier::train( const String _cascadeDirName,
|
|||||||
featureEvaluator = CvFeatureEvaluator::create(cascadeParams.featureType);
|
featureEvaluator = CvFeatureEvaluator::create(cascadeParams.featureType);
|
||||||
featureEvaluator->init( (CvFeatureParams*)featureParams, numPos + numNeg, cascadeParams.winSize );
|
featureEvaluator->init( (CvFeatureParams*)featureParams, numPos + numNeg, cascadeParams.winSize );
|
||||||
stageClassifiers.reserve( numStages );
|
stageClassifiers.reserve( numStages );
|
||||||
|
}else{
|
||||||
|
// Make sure that if model parameters are preloaded, that people are aware of this,
|
||||||
|
// even when passing other parameters to the training command
|
||||||
|
cout << "---------------------------------------------------------------------------------" << endl;
|
||||||
|
cout << "Training parameters are pre-loaded from the parameter file in data folder!" << endl;
|
||||||
|
cout << "Please empty this folder if you want to use a NEW set of training parameters." << endl;
|
||||||
|
cout << "---------------------------------------------------------------------------------" << endl;
|
||||||
}
|
}
|
||||||
cout << "PARAMETERS:" << endl;
|
cout << "PARAMETERS:" << endl;
|
||||||
cout << "cascadeDirName: " << _cascadeDirName << endl;
|
cout << "cascadeDirName: " << _cascadeDirName << endl;
|
||||||
@@ -175,6 +187,7 @@ bool CvCascadeClassifier::train( const String _cascadeDirName,
|
|||||||
cout << "numStages: " << numStages << endl;
|
cout << "numStages: " << numStages << endl;
|
||||||
cout << "precalcValBufSize[Mb] : " << _precalcValBufSize << endl;
|
cout << "precalcValBufSize[Mb] : " << _precalcValBufSize << endl;
|
||||||
cout << "precalcIdxBufSize[Mb] : " << _precalcIdxBufSize << endl;
|
cout << "precalcIdxBufSize[Mb] : " << _precalcIdxBufSize << endl;
|
||||||
|
cout << "acceptanceRatioBreakValue : " << acceptanceRatioBreakValue << endl;
|
||||||
cascadeParams.printAttrs();
|
cascadeParams.printAttrs();
|
||||||
stageParams->printAttrs();
|
stageParams->printAttrs();
|
||||||
featureParams->printAttrs();
|
featureParams->printAttrs();
|
||||||
@@ -194,18 +207,23 @@ bool CvCascadeClassifier::train( const String _cascadeDirName,
|
|||||||
cout << endl << "===== TRAINING " << i << "-stage =====" << endl;
|
cout << endl << "===== TRAINING " << i << "-stage =====" << endl;
|
||||||
cout << "<BEGIN" << endl;
|
cout << "<BEGIN" << endl;
|
||||||
|
|
||||||
if ( !updateTrainingSet( tempLeafFARate ) )
|
if ( !updateTrainingSet( requiredLeafFARate, tempLeafFARate ) )
|
||||||
{
|
{
|
||||||
cout << "Train dataset for temp stage can not be filled. "
|
cout << "Train dataset for temp stage can not be filled. "
|
||||||
"Branch training terminated." << endl;
|
"Branch training terminated." << endl;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if( tempLeafFARate <= requiredLeafFARate )
|
if( tempLeafFARate <= requiredLeafFARate )
|
||||||
{
|
{
|
||||||
cout << "Required leaf false alarm rate achieved. "
|
cout << "Required leaf false alarm rate achieved. "
|
||||||
"Branch training terminated." << endl;
|
"Branch training terminated." << endl;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
if( (tempLeafFARate <= acceptanceRatioBreakValue) && (acceptanceRatioBreakValue >= 0) ){
|
||||||
|
cout << "The required acceptanceRatio for the model has been reached to avoid overfitting of trainingdata. "
|
||||||
|
"Branch training terminated." << endl;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
CvCascadeBoost* tempStage = new CvCascadeBoost;
|
CvCascadeBoost* tempStage = new CvCascadeBoost;
|
||||||
bool isStageTrained = tempStage->train( (CvFeatureEvaluator*)featureEvaluator,
|
bool isStageTrained = tempStage->train( (CvFeatureEvaluator*)featureEvaluator,
|
||||||
@@ -247,6 +265,14 @@ bool CvCascadeClassifier::train( const String _cascadeDirName,
|
|||||||
fs << FileStorage::getDefaultObjectName(stageFilename) << "{";
|
fs << FileStorage::getDefaultObjectName(stageFilename) << "{";
|
||||||
tempStage->write( fs, Mat() );
|
tempStage->write( fs, Mat() );
|
||||||
fs << "}";
|
fs << "}";
|
||||||
|
|
||||||
|
// Output training time up till now
|
||||||
|
float seconds = float( clock () - begin_time ) / CLOCKS_PER_SEC;
|
||||||
|
int days = int(seconds) / 60 / 60 / 24;
|
||||||
|
int hours = (int(seconds) / 60 / 60) % 24;
|
||||||
|
int minutes = (int(seconds) / 60) % 60;
|
||||||
|
int seconds_left = int(seconds) % 60;
|
||||||
|
cout << "Training until now has taken " << days << " days " << hours << " hours " << minutes << " minutes " << seconds_left <<" seconds." << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(stageClassifiers.size() == 0)
|
if(stageClassifiers.size() == 0)
|
||||||
@@ -272,17 +298,17 @@ int CvCascadeClassifier::predict( int sampleIdx )
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CvCascadeClassifier::updateTrainingSet( double& acceptanceRatio)
|
bool CvCascadeClassifier::updateTrainingSet( double minimumAcceptanceRatio, double& acceptanceRatio)
|
||||||
{
|
{
|
||||||
int64 posConsumed = 0, negConsumed = 0;
|
int64 posConsumed = 0, negConsumed = 0;
|
||||||
imgReader.restart();
|
imgReader.restart();
|
||||||
int posCount = fillPassedSamples( 0, numPos, true, posConsumed );
|
int posCount = fillPassedSamples( 0, numPos, true, 0, posConsumed );
|
||||||
if( !posCount )
|
if( !posCount )
|
||||||
return false;
|
return false;
|
||||||
cout << "POS count : consumed " << posCount << " : " << (int)posConsumed << endl;
|
cout << "POS count : consumed " << posCount << " : " << (int)posConsumed << endl;
|
||||||
|
|
||||||
int proNumNeg = cvRound( ( ((double)numNeg) * ((double)posCount) ) / numPos ); // apply only a fraction of negative samples. double is required since overflow is possible
|
int proNumNeg = cvRound( ( ((double)numNeg) * ((double)posCount) ) / numPos ); // apply only a fraction of negative samples. double is required since overflow is possible
|
||||||
int negCount = fillPassedSamples( posCount, proNumNeg, false, negConsumed );
|
int negCount = fillPassedSamples( posCount, proNumNeg, false, minimumAcceptanceRatio, negConsumed );
|
||||||
if ( !negCount )
|
if ( !negCount )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
@@ -292,7 +318,7 @@ bool CvCascadeClassifier::updateTrainingSet( double& acceptanceRatio)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
int CvCascadeClassifier::fillPassedSamples( int first, int count, bool isPositive, int64& consumed )
|
int CvCascadeClassifier::fillPassedSamples( int first, int count, bool isPositive, double minimumAcceptanceRatio, int64& consumed )
|
||||||
{
|
{
|
||||||
int getcount = 0;
|
int getcount = 0;
|
||||||
Mat img(cascadeParams.winSize, CV_8UC1);
|
Mat img(cascadeParams.winSize, CV_8UC1);
|
||||||
@@ -300,6 +326,9 @@ int CvCascadeClassifier::fillPassedSamples( int first, int count, bool isPositiv
|
|||||||
{
|
{
|
||||||
for( ; ; )
|
for( ; ; )
|
||||||
{
|
{
|
||||||
|
if( consumed != 0 && ((double)getcount+1)/(double)(int64)consumed <= minimumAcceptanceRatio )
|
||||||
|
return getcount;
|
||||||
|
|
||||||
bool isGetImg = isPositive ? imgReader.getPos( img ) :
|
bool isGetImg = isPositive ? imgReader.getPos( img ) :
|
||||||
imgReader.getNeg( img );
|
imgReader.getNeg( img );
|
||||||
if( !isGetImg )
|
if( !isGetImg )
|
||||||
@@ -310,6 +339,7 @@ int CvCascadeClassifier::fillPassedSamples( int first, int count, bool isPositiv
|
|||||||
if( predict( i ) == 1.0F )
|
if( predict( i ) == 1.0F )
|
||||||
{
|
{
|
||||||
getcount++;
|
getcount++;
|
||||||
|
printf("%s current samples: %d\r", isPositive ? "POS":"NEG", getcount);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -399,7 +429,7 @@ bool CvCascadeClassifier::readStages( const FileNode &node)
|
|||||||
#define ICV_HAAR_PARENT_NAME "parent"
|
#define ICV_HAAR_PARENT_NAME "parent"
|
||||||
#define ICV_HAAR_NEXT_NAME "next"
|
#define ICV_HAAR_NEXT_NAME "next"
|
||||||
|
|
||||||
void CvCascadeClassifier::save( const String filename, bool baseFormat )
|
void CvCascadeClassifier::save( const string filename, bool baseFormat )
|
||||||
{
|
{
|
||||||
FileStorage fs( filename, FileStorage::WRITE );
|
FileStorage fs( filename, FileStorage::WRITE );
|
||||||
|
|
||||||
@@ -491,7 +521,7 @@ void CvCascadeClassifier::save( const String filename, bool baseFormat )
|
|||||||
fs << "}";
|
fs << "}";
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CvCascadeClassifier::load( const String cascadeDirName )
|
bool CvCascadeClassifier::load( const string cascadeDirName )
|
||||||
{
|
{
|
||||||
FileStorage fs( cascadeDirName + CC_PARAMS_FILENAME, FileStorage::READ );
|
FileStorage fs( cascadeDirName + CC_PARAMS_FILENAME, FileStorage::READ );
|
||||||
if ( !fs.isOpened() )
|
if ( !fs.isOpened() )
|
||||||
|
|||||||
@@ -72,52 +72,53 @@ public:
|
|||||||
|
|
||||||
CvCascadeParams();
|
CvCascadeParams();
|
||||||
CvCascadeParams( int _stageType, int _featureType );
|
CvCascadeParams( int _stageType, int _featureType );
|
||||||
void write( FileStorage &fs ) const;
|
void write( cv::FileStorage &fs ) const;
|
||||||
bool read( const FileNode &node );
|
bool read( const cv::FileNode &node );
|
||||||
|
|
||||||
void printDefaults() const;
|
void printDefaults() const;
|
||||||
void printAttrs() const;
|
void printAttrs() const;
|
||||||
bool scanAttr( const String prmName, const String val );
|
bool scanAttr( const std::string prmName, const std::string val );
|
||||||
|
|
||||||
int stageType;
|
int stageType;
|
||||||
int featureType;
|
int featureType;
|
||||||
Size winSize;
|
cv::Size winSize;
|
||||||
};
|
};
|
||||||
|
|
||||||
class CvCascadeClassifier
|
class CvCascadeClassifier
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
bool train( const String _cascadeDirName,
|
bool train( const std::string _cascadeDirName,
|
||||||
const String _posFilename,
|
const std::string _posFilename,
|
||||||
const String _negFilename,
|
const std::string _negFilename,
|
||||||
int _numPos, int _numNeg,
|
int _numPos, int _numNeg,
|
||||||
int _precalcValBufSize, int _precalcIdxBufSize,
|
int _precalcValBufSize, int _precalcIdxBufSize,
|
||||||
int _numStages,
|
int _numStages,
|
||||||
const CvCascadeParams& _cascadeParams,
|
const CvCascadeParams& _cascadeParams,
|
||||||
const CvFeatureParams& _featureParams,
|
const CvFeatureParams& _featureParams,
|
||||||
const CvCascadeBoostParams& _stageParams,
|
const CvCascadeBoostParams& _stageParams,
|
||||||
bool baseFormatSave = false );
|
bool baseFormatSave = false,
|
||||||
|
double acceptanceRatioBreakValue = -1.0 );
|
||||||
private:
|
private:
|
||||||
int predict( int sampleIdx );
|
int predict( int sampleIdx );
|
||||||
void save( const String cascadeDirName, bool baseFormat = false );
|
void save( const std::string cascadeDirName, bool baseFormat = false );
|
||||||
bool load( const String cascadeDirName );
|
bool load( const std::string cascadeDirName );
|
||||||
bool updateTrainingSet( double& acceptanceRatio );
|
bool updateTrainingSet( double minimumAcceptanceRatio, double& acceptanceRatio );
|
||||||
int fillPassedSamples( int first, int count, bool isPositive, int64& consumed );
|
int fillPassedSamples( int first, int count, bool isPositive, double requiredAcceptanceRatio, int64& consumed );
|
||||||
|
|
||||||
void writeParams( FileStorage &fs ) const;
|
void writeParams( cv::FileStorage &fs ) const;
|
||||||
void writeStages( FileStorage &fs, const Mat& featureMap ) const;
|
void writeStages( cv::FileStorage &fs, const cv::Mat& featureMap ) const;
|
||||||
void writeFeatures( FileStorage &fs, const Mat& featureMap ) const;
|
void writeFeatures( cv::FileStorage &fs, const cv::Mat& featureMap ) const;
|
||||||
bool readParams( const FileNode &node );
|
bool readParams( const cv::FileNode &node );
|
||||||
bool readStages( const FileNode &node );
|
bool readStages( const cv::FileNode &node );
|
||||||
|
|
||||||
void getUsedFeaturesIdxMap( Mat& featureMap );
|
void getUsedFeaturesIdxMap( cv::Mat& featureMap );
|
||||||
|
|
||||||
CvCascadeParams cascadeParams;
|
CvCascadeParams cascadeParams;
|
||||||
Ptr<CvFeatureParams> featureParams;
|
cv::Ptr<CvFeatureParams> featureParams;
|
||||||
Ptr<CvCascadeBoostParams> stageParams;
|
cv::Ptr<CvCascadeBoostParams> stageParams;
|
||||||
|
|
||||||
Ptr<CvFeatureEvaluator> featureEvaluator;
|
cv::Ptr<CvFeatureEvaluator> featureEvaluator;
|
||||||
vector< Ptr<CvCascadeBoost> > stageClassifiers;
|
std::vector< cv::Ptr<CvCascadeBoost> > stageClassifiers;
|
||||||
CvCascadeImageReader imgReader;
|
CvCascadeImageReader imgReader;
|
||||||
int numStages, curNumSamples;
|
int numStages, curNumSamples;
|
||||||
int numPos, numNeg;
|
int numPos, numNeg;
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
#include "cascadeclassifier.h"
|
#include "cascadeclassifier.h"
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
using namespace cv;
|
||||||
|
|
||||||
float calcNormFactor( const Mat& sum, const Mat& sqSum )
|
float calcNormFactor( const Mat& sum, const Mat& sqSum )
|
||||||
{
|
{
|
||||||
@@ -24,7 +25,7 @@ CvParams::CvParams() : name( "params" ) {}
|
|||||||
void CvParams::printDefaults() const
|
void CvParams::printDefaults() const
|
||||||
{ cout << "--" << name << "--" << endl; }
|
{ cout << "--" << name << "--" << endl; }
|
||||||
void CvParams::printAttrs() const {}
|
void CvParams::printAttrs() const {}
|
||||||
bool CvParams::scanAttr( const String, const String ) { return false; }
|
bool CvParams::scanAttr( const string, const string ) { return false; }
|
||||||
|
|
||||||
|
|
||||||
//---------------------------- FeatureParams --------------------------------------
|
//---------------------------- FeatureParams --------------------------------------
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
#include "cascadeclassifier.h"
|
#include "cascadeclassifier.h"
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
using namespace cv;
|
||||||
|
|
||||||
CvHaarFeatureParams::CvHaarFeatureParams() : mode(BASIC)
|
CvHaarFeatureParams::CvHaarFeatureParams() : mode(BASIC)
|
||||||
{
|
{
|
||||||
@@ -25,9 +26,9 @@ void CvHaarFeatureParams::init( const CvFeatureParams& fp )
|
|||||||
void CvHaarFeatureParams::write( FileStorage &fs ) const
|
void CvHaarFeatureParams::write( FileStorage &fs ) const
|
||||||
{
|
{
|
||||||
CvFeatureParams::write( fs );
|
CvFeatureParams::write( fs );
|
||||||
String modeStr = mode == BASIC ? CC_MODE_BASIC :
|
string modeStr = mode == BASIC ? CC_MODE_BASIC :
|
||||||
mode == CORE ? CC_MODE_CORE :
|
mode == CORE ? CC_MODE_CORE :
|
||||||
mode == ALL ? CC_MODE_ALL : String();
|
mode == ALL ? CC_MODE_ALL : string();
|
||||||
CV_Assert( !modeStr.empty() );
|
CV_Assert( !modeStr.empty() );
|
||||||
fs << CC_MODE << modeStr;
|
fs << CC_MODE << modeStr;
|
||||||
}
|
}
|
||||||
@@ -40,7 +41,7 @@ bool CvHaarFeatureParams::read( const FileNode &node )
|
|||||||
FileNode rnode = node[CC_MODE];
|
FileNode rnode = node[CC_MODE];
|
||||||
if( !rnode.isString() )
|
if( !rnode.isString() )
|
||||||
return false;
|
return false;
|
||||||
String modeStr;
|
string modeStr;
|
||||||
rnode >> modeStr;
|
rnode >> modeStr;
|
||||||
mode = !modeStr.compare( CC_MODE_BASIC ) ? BASIC :
|
mode = !modeStr.compare( CC_MODE_BASIC ) ? BASIC :
|
||||||
!modeStr.compare( CC_MODE_CORE ) ? CORE :
|
!modeStr.compare( CC_MODE_CORE ) ? CORE :
|
||||||
@@ -58,13 +59,13 @@ void CvHaarFeatureParams::printDefaults() const
|
|||||||
void CvHaarFeatureParams::printAttrs() const
|
void CvHaarFeatureParams::printAttrs() const
|
||||||
{
|
{
|
||||||
CvFeatureParams::printAttrs();
|
CvFeatureParams::printAttrs();
|
||||||
String mode_str = mode == BASIC ? CC_MODE_BASIC :
|
string mode_str = mode == BASIC ? CC_MODE_BASIC :
|
||||||
mode == CORE ? CC_MODE_CORE :
|
mode == CORE ? CC_MODE_CORE :
|
||||||
mode == ALL ? CC_MODE_ALL : 0;
|
mode == ALL ? CC_MODE_ALL : 0;
|
||||||
cout << "mode: " << mode_str << endl;
|
cout << "mode: " << mode_str << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CvHaarFeatureParams::scanAttr( const String prmName, const String val)
|
bool CvHaarFeatureParams::scanAttr( const string prmName, const string val)
|
||||||
{
|
{
|
||||||
if ( !CvFeatureParams::scanAttr( prmName, val ) )
|
if ( !CvFeatureParams::scanAttr( prmName, val ) )
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -18,12 +18,12 @@ public:
|
|||||||
CvHaarFeatureParams( int _mode );
|
CvHaarFeatureParams( int _mode );
|
||||||
|
|
||||||
virtual void init( const CvFeatureParams& fp );
|
virtual void init( const CvFeatureParams& fp );
|
||||||
virtual void write( FileStorage &fs ) const;
|
virtual void write( cv::FileStorage &fs ) const;
|
||||||
virtual bool read( const FileNode &node );
|
virtual bool read( const cv::FileNode &node );
|
||||||
|
|
||||||
virtual void printDefaults() const;
|
virtual void printDefaults() const;
|
||||||
virtual void printAttrs() const;
|
virtual void printAttrs() const;
|
||||||
virtual bool scanAttr( const String prm, const String val);
|
virtual bool scanAttr( const std::string prm, const std::string val);
|
||||||
|
|
||||||
int mode;
|
int mode;
|
||||||
};
|
};
|
||||||
@@ -32,11 +32,11 @@ class CvHaarEvaluator : public CvFeatureEvaluator
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
virtual void init(const CvFeatureParams *_featureParams,
|
virtual void init(const CvFeatureParams *_featureParams,
|
||||||
int _maxSampleCount, Size _winSize );
|
int _maxSampleCount, cv::Size _winSize );
|
||||||
virtual void setImage(const Mat& img, uchar clsLabel, int idx);
|
virtual void setImage(const cv::Mat& img, uchar clsLabel, int idx);
|
||||||
virtual float operator()(int featureIdx, int sampleIdx) const;
|
virtual float operator()(int featureIdx, int sampleIdx) const;
|
||||||
virtual void writeFeatures( FileStorage &fs, const Mat& featureMap ) const;
|
virtual void writeFeatures( cv::FileStorage &fs, const cv::Mat& featureMap ) const;
|
||||||
void writeFeature( FileStorage &fs, int fi ) const; // for old file fornat
|
void writeFeature( cv::FileStorage &fs, int fi ) const; // for old file fornat
|
||||||
protected:
|
protected:
|
||||||
virtual void generateFeatures();
|
virtual void generateFeatures();
|
||||||
|
|
||||||
@@ -48,13 +48,13 @@ protected:
|
|||||||
int x0, int y0, int w0, int h0, float wt0,
|
int x0, int y0, int w0, int h0, float wt0,
|
||||||
int x1, int y1, int w1, int h1, float wt1,
|
int x1, int y1, int w1, int h1, float wt1,
|
||||||
int x2 = 0, int y2 = 0, int w2 = 0, int h2 = 0, float wt2 = 0.0F );
|
int x2 = 0, int y2 = 0, int w2 = 0, int h2 = 0, float wt2 = 0.0F );
|
||||||
float calc( const Mat &sum, const Mat &tilted, size_t y) const;
|
float calc( const cv::Mat &sum, const cv::Mat &tilted, size_t y) const;
|
||||||
void write( FileStorage &fs ) const;
|
void write( cv::FileStorage &fs ) const;
|
||||||
|
|
||||||
bool tilted;
|
bool tilted;
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
Rect r;
|
cv::Rect r;
|
||||||
float weight;
|
float weight;
|
||||||
} rect[CV_HAAR_FEATURE_MAX];
|
} rect[CV_HAAR_FEATURE_MAX];
|
||||||
|
|
||||||
@@ -64,10 +64,10 @@ protected:
|
|||||||
} fastRect[CV_HAAR_FEATURE_MAX];
|
} fastRect[CV_HAAR_FEATURE_MAX];
|
||||||
};
|
};
|
||||||
|
|
||||||
vector<Feature> features;
|
std::vector<Feature> features;
|
||||||
Mat sum; /* sum images (each row represents image) */
|
cv::Mat sum; /* sum images (each row represents image) */
|
||||||
Mat tilted; /* tilted sum images (each row represents image) */
|
cv::Mat tilted; /* tilted sum images (each row represents image) */
|
||||||
Mat normfactor; /* normalization factor */
|
cv::Mat normfactor; /* normalization factor */
|
||||||
};
|
};
|
||||||
|
|
||||||
inline float CvHaarEvaluator::operator()(int featureIdx, int sampleIdx) const
|
inline float CvHaarEvaluator::operator()(int featureIdx, int sampleIdx) const
|
||||||
@@ -76,7 +76,7 @@ inline float CvHaarEvaluator::operator()(int featureIdx, int sampleIdx) const
|
|||||||
return !nf ? 0.0f : (features[featureIdx].calc( sum, tilted, sampleIdx)/nf);
|
return !nf ? 0.0f : (features[featureIdx].calc( sum, tilted, sampleIdx)/nf);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline float CvHaarEvaluator::Feature::calc( const Mat &_sum, const Mat &_tilted, size_t y) const
|
inline float CvHaarEvaluator::Feature::calc( const cv::Mat &_sum, const cv::Mat &_tilted, size_t y) const
|
||||||
{
|
{
|
||||||
const int* img = tilted ? _tilted.ptr<int>((int)y) : _sum.ptr<int>((int)y);
|
const int* img = tilted ? _tilted.ptr<int>((int)y) : _sum.ptr<int>((int)y);
|
||||||
float ret = rect[0].weight * (img[fastRect[0].p0] - img[fastRect[0].p1] - img[fastRect[0].p2] + img[fastRect[0].p3] ) +
|
float ret = rect[0].weight * (img[fastRect[0].p0] - img[fastRect[0].p1] - img[fastRect[0].p2] + img[fastRect[0].p3] ) +
|
||||||
|
|||||||
@@ -7,7 +7,10 @@
|
|||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
|
|
||||||
bool CvCascadeImageReader::create( const String _posFilename, const String _negFilename, Size _winSize )
|
using namespace std;
|
||||||
|
using namespace cv;
|
||||||
|
|
||||||
|
bool CvCascadeImageReader::create( const string _posFilename, const string _negFilename, Size _winSize )
|
||||||
{
|
{
|
||||||
return posReader.create(_posFilename) && negReader.create(_negFilename, _winSize);
|
return posReader.create(_posFilename) && negReader.create(_negFilename, _winSize);
|
||||||
}
|
}
|
||||||
@@ -22,27 +25,19 @@ CvCascadeImageReader::NegReader::NegReader()
|
|||||||
stepFactor = 0.5F;
|
stepFactor = 0.5F;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CvCascadeImageReader::NegReader::create( const String _filename, Size _winSize )
|
bool CvCascadeImageReader::NegReader::create( const string _filename, Size _winSize )
|
||||||
{
|
{
|
||||||
String dirname, str;
|
string dirname, str;
|
||||||
std::ifstream file(_filename.c_str());
|
std::ifstream file(_filename.c_str());
|
||||||
if ( !file.is_open() )
|
if ( !file.is_open() )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
size_t pos = _filename.rfind('\\');
|
|
||||||
char dlmrt = '\\';
|
|
||||||
if (pos == String::npos)
|
|
||||||
{
|
|
||||||
pos = _filename.rfind('/');
|
|
||||||
dlmrt = '/';
|
|
||||||
}
|
|
||||||
dirname = pos == String::npos ? "" : _filename.substr(0, pos) + dlmrt;
|
|
||||||
while( !file.eof() )
|
while( !file.eof() )
|
||||||
{
|
{
|
||||||
std::getline(file, str);
|
std::getline(file, str);
|
||||||
if (str.empty()) break;
|
if (str.empty()) break;
|
||||||
if (str.at(0) == '#' ) continue; /* comment */
|
if (str.at(0) == '#' ) continue; /* comment */
|
||||||
imgFilenames.push_back(dirname + str);
|
imgFilenames.push_back(str);
|
||||||
}
|
}
|
||||||
file.close();
|
file.close();
|
||||||
|
|
||||||
@@ -64,10 +59,10 @@ bool CvCascadeImageReader::NegReader::nextImg()
|
|||||||
round = round % (winSize.width * winSize.height);
|
round = round % (winSize.width * winSize.height);
|
||||||
last %= count;
|
last %= count;
|
||||||
|
|
||||||
_offset.x = min( (int)round % winSize.width, src.cols - winSize.width );
|
_offset.x = std::min( (int)round % winSize.width, src.cols - winSize.width );
|
||||||
_offset.y = min( (int)round / winSize.width, src.rows - winSize.height );
|
_offset.y = std::min( (int)round / winSize.width, src.rows - winSize.height );
|
||||||
if( !src.empty() && src.type() == CV_8UC1
|
if( !src.empty() && src.type() == CV_8UC1
|
||||||
&& offset.x >= 0 && offset.y >= 0 )
|
&& _offset.x >= 0 && _offset.y >= 0 )
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -126,7 +121,7 @@ CvCascadeImageReader::PosReader::PosReader()
|
|||||||
vec = 0;
|
vec = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CvCascadeImageReader::PosReader::create( const String _filename )
|
bool CvCascadeImageReader::PosReader::create( const string _filename )
|
||||||
{
|
{
|
||||||
if ( file )
|
if ( file )
|
||||||
fclose( file );
|
fclose( file );
|
||||||
|
|||||||
@@ -1,17 +1,18 @@
|
|||||||
#ifndef _OPENCV_IMAGESTORAGE_H_
|
#ifndef _OPENCV_IMAGESTORAGE_H_
|
||||||
#define _OPENCV_IMAGESTORAGE_H_
|
#define _OPENCV_IMAGESTORAGE_H_
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
#include "highgui.h"
|
#include "highgui.h"
|
||||||
|
|
||||||
using namespace cv;
|
|
||||||
|
|
||||||
class CvCascadeImageReader
|
class CvCascadeImageReader
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
bool create( const String _posFilename, const String _negFilename, Size _winSize );
|
bool create( const std::string _posFilename, const std::string _negFilename, cv::Size _winSize );
|
||||||
void restart() { posReader.restart(); }
|
void restart() { posReader.restart(); }
|
||||||
bool getNeg(Mat &_img) { return negReader.get( _img ); }
|
bool getNeg(cv::Mat &_img) { return negReader.get( _img ); }
|
||||||
bool getPos(Mat &_img) { return posReader.get( _img ); }
|
bool getPos(cv::Mat &_img) { return posReader.get( _img ); }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
class PosReader
|
class PosReader
|
||||||
@@ -19,8 +20,8 @@ private:
|
|||||||
public:
|
public:
|
||||||
PosReader();
|
PosReader();
|
||||||
virtual ~PosReader();
|
virtual ~PosReader();
|
||||||
bool create( const String _filename );
|
bool create( const std::string _filename );
|
||||||
bool get( Mat &_img );
|
bool get( cv::Mat &_img );
|
||||||
void restart();
|
void restart();
|
||||||
|
|
||||||
short* vec;
|
short* vec;
|
||||||
@@ -35,18 +36,18 @@ private:
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
NegReader();
|
NegReader();
|
||||||
bool create( const String _filename, Size _winSize );
|
bool create( const std::string _filename, cv::Size _winSize );
|
||||||
bool get( Mat& _img );
|
bool get( cv::Mat& _img );
|
||||||
bool nextImg();
|
bool nextImg();
|
||||||
|
|
||||||
Mat src, img;
|
cv::Mat src, img;
|
||||||
vector<String> imgFilenames;
|
std::vector<std::string> imgFilenames;
|
||||||
Point offset, point;
|
cv::Point offset, point;
|
||||||
float scale;
|
float scale;
|
||||||
float scaleFactor;
|
float scaleFactor;
|
||||||
float stepFactor;
|
float stepFactor;
|
||||||
size_t last, round;
|
size_t last, round;
|
||||||
Size winSize;
|
cv::Size winSize;
|
||||||
} negReader;
|
} negReader;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,8 @@
|
|||||||
#include "lbpfeatures.h"
|
#include "lbpfeatures.h"
|
||||||
#include "cascadeclassifier.h"
|
#include "cascadeclassifier.h"
|
||||||
|
|
||||||
|
using namespace cv;
|
||||||
|
|
||||||
CvLBPFeatureParams::CvLBPFeatureParams()
|
CvLBPFeatureParams::CvLBPFeatureParams()
|
||||||
{
|
{
|
||||||
maxCatCount = 256;
|
maxCatCount = 256;
|
||||||
|
|||||||
@@ -15,11 +15,11 @@ class CvLBPEvaluator : public CvFeatureEvaluator
|
|||||||
public:
|
public:
|
||||||
virtual ~CvLBPEvaluator() {}
|
virtual ~CvLBPEvaluator() {}
|
||||||
virtual void init(const CvFeatureParams *_featureParams,
|
virtual void init(const CvFeatureParams *_featureParams,
|
||||||
int _maxSampleCount, Size _winSize );
|
int _maxSampleCount, cv::Size _winSize );
|
||||||
virtual void setImage(const Mat& img, uchar clsLabel, int idx);
|
virtual void setImage(const cv::Mat& img, uchar clsLabel, int idx);
|
||||||
virtual float operator()(int featureIdx, int sampleIdx) const
|
virtual float operator()(int featureIdx, int sampleIdx) const
|
||||||
{ return (float)features[featureIdx].calc( sum, sampleIdx); }
|
{ return (float)features[featureIdx].calc( sum, sampleIdx); }
|
||||||
virtual void writeFeatures( FileStorage &fs, const Mat& featureMap ) const;
|
virtual void writeFeatures( cv::FileStorage &fs, const cv::Mat& featureMap ) const;
|
||||||
protected:
|
protected:
|
||||||
virtual void generateFeatures();
|
virtual void generateFeatures();
|
||||||
|
|
||||||
@@ -28,18 +28,18 @@ protected:
|
|||||||
public:
|
public:
|
||||||
Feature();
|
Feature();
|
||||||
Feature( int offset, int x, int y, int _block_w, int _block_h );
|
Feature( int offset, int x, int y, int _block_w, int _block_h );
|
||||||
uchar calc( const Mat& _sum, size_t y ) const;
|
uchar calc( const cv::Mat& _sum, size_t y ) const;
|
||||||
void write( FileStorage &fs ) const;
|
void write( cv::FileStorage &fs ) const;
|
||||||
|
|
||||||
Rect rect;
|
cv::Rect rect;
|
||||||
int p[16];
|
int p[16];
|
||||||
};
|
};
|
||||||
vector<Feature> features;
|
std::vector<Feature> features;
|
||||||
|
|
||||||
Mat sum;
|
cv::Mat sum;
|
||||||
};
|
};
|
||||||
|
|
||||||
inline uchar CvLBPEvaluator::Feature::calc(const Mat &_sum, size_t y) const
|
inline uchar CvLBPEvaluator::Feature::calc(const cv::Mat &_sum, size_t y) const
|
||||||
{
|
{
|
||||||
const int* psum = _sum.ptr<int>((int)y);
|
const int* psum = _sum.ptr<int>((int)y);
|
||||||
int cval = psum[p[5]] - psum[p[6]] - psum[p[9]] + psum[p[10]];
|
int cval = psum[p[5]] - psum[p[6]] - psum[p[9]] + psum[p[10]];
|
||||||
|
|||||||
@@ -5,17 +5,19 @@
|
|||||||
#include "cascadeclassifier.h"
|
#include "cascadeclassifier.h"
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
using namespace cv;
|
||||||
|
|
||||||
int main( int argc, char* argv[] )
|
int main( int argc, char* argv[] )
|
||||||
{
|
{
|
||||||
CvCascadeClassifier classifier;
|
CvCascadeClassifier classifier;
|
||||||
String cascadeDirName, vecName, bgName;
|
string cascadeDirName, vecName, bgName;
|
||||||
int numPos = 2000;
|
int numPos = 2000;
|
||||||
int numNeg = 1000;
|
int numNeg = 1000;
|
||||||
int numStages = 20;
|
int numStages = 20;
|
||||||
int precalcValBufSize = 256,
|
int precalcValBufSize = 1024,
|
||||||
precalcIdxBufSize = 256;
|
precalcIdxBufSize = 1024;
|
||||||
bool baseFormatSave = false;
|
bool baseFormatSave = false;
|
||||||
|
double acceptanceRatioBreakValue = -1.0;
|
||||||
|
|
||||||
CvCascadeParams cascadeParams;
|
CvCascadeParams cascadeParams;
|
||||||
CvCascadeBoostParams stageParams;
|
CvCascadeBoostParams stageParams;
|
||||||
@@ -36,6 +38,7 @@ int main( int argc, char* argv[] )
|
|||||||
cout << " [-precalcValBufSize <precalculated_vals_buffer_size_in_Mb = " << precalcValBufSize << ">]" << endl;
|
cout << " [-precalcValBufSize <precalculated_vals_buffer_size_in_Mb = " << precalcValBufSize << ">]" << endl;
|
||||||
cout << " [-precalcIdxBufSize <precalculated_idxs_buffer_size_in_Mb = " << precalcIdxBufSize << ">]" << endl;
|
cout << " [-precalcIdxBufSize <precalculated_idxs_buffer_size_in_Mb = " << precalcIdxBufSize << ">]" << endl;
|
||||||
cout << " [-baseFormatSave]" << endl;
|
cout << " [-baseFormatSave]" << endl;
|
||||||
|
cout << " [-acceptanceRatioBreakValue <value> = " << acceptanceRatioBreakValue << ">]" << endl;
|
||||||
cascadeParams.printDefaults();
|
cascadeParams.printDefaults();
|
||||||
stageParams.printDefaults();
|
stageParams.printDefaults();
|
||||||
for( int fi = 0; fi < fc; fi++ )
|
for( int fi = 0; fi < fc; fi++ )
|
||||||
@@ -82,6 +85,10 @@ int main( int argc, char* argv[] )
|
|||||||
{
|
{
|
||||||
baseFormatSave = true;
|
baseFormatSave = true;
|
||||||
}
|
}
|
||||||
|
else if( !strcmp( argv[i], "-acceptanceRatioBreakValue" ) )
|
||||||
|
{
|
||||||
|
acceptanceRatioBreakValue = atof(argv[++i]);
|
||||||
|
}
|
||||||
else if ( cascadeParams.scanAttr( argv[i], argv[i+1] ) ) { i++; }
|
else if ( cascadeParams.scanAttr( argv[i], argv[i+1] ) ) { i++; }
|
||||||
else if ( stageParams.scanAttr( argv[i], argv[i+1] ) ) { i++; }
|
else if ( stageParams.scanAttr( argv[i], argv[i+1] ) ) { i++; }
|
||||||
else if ( !set )
|
else if ( !set )
|
||||||
@@ -107,6 +114,7 @@ int main( int argc, char* argv[] )
|
|||||||
cascadeParams,
|
cascadeParams,
|
||||||
*featureParams[cascadeParams.featureType],
|
*featureParams[cascadeParams.featureType],
|
||||||
stageParams,
|
stageParams,
|
||||||
baseFormatSave );
|
baseFormatSave,
|
||||||
|
acceptanceRatioBreakValue );
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,13 +30,13 @@
|
|||||||
(p3) = (rect).x + (rect).width - (rect).height \
|
(p3) = (rect).x + (rect).width - (rect).height \
|
||||||
+ (step) * ((rect).y + (rect).width + (rect).height);
|
+ (step) * ((rect).y + (rect).width + (rect).height);
|
||||||
|
|
||||||
float calcNormFactor( const Mat& sum, const Mat& sqSum );
|
float calcNormFactor( const cv::Mat& sum, const cv::Mat& sqSum );
|
||||||
|
|
||||||
template<class Feature>
|
template<class Feature>
|
||||||
void _writeFeatures( const vector<Feature> features, FileStorage &fs, const Mat& featureMap )
|
void _writeFeatures( const std::vector<Feature> features, cv::FileStorage &fs, const cv::Mat& featureMap )
|
||||||
{
|
{
|
||||||
fs << FEATURES << "[";
|
fs << FEATURES << "[";
|
||||||
const Mat_<int>& featureMap_ = (const Mat_<int>&)featureMap;
|
const cv::Mat_<int>& featureMap_ = (const cv::Mat_<int>&)featureMap;
|
||||||
for ( int fi = 0; fi < featureMap.cols; fi++ )
|
for ( int fi = 0; fi < featureMap.cols; fi++ )
|
||||||
if ( featureMap_(0, fi) >= 0 )
|
if ( featureMap_(0, fi) >= 0 )
|
||||||
{
|
{
|
||||||
@@ -53,13 +53,13 @@ public:
|
|||||||
CvParams();
|
CvParams();
|
||||||
virtual ~CvParams() {}
|
virtual ~CvParams() {}
|
||||||
// from|to file
|
// from|to file
|
||||||
virtual void write( FileStorage &fs ) const = 0;
|
virtual void write( cv::FileStorage &fs ) const = 0;
|
||||||
virtual bool read( const FileNode &node ) = 0;
|
virtual bool read( const cv::FileNode &node ) = 0;
|
||||||
// from|to screen
|
// from|to screen
|
||||||
virtual void printDefaults() const;
|
virtual void printDefaults() const;
|
||||||
virtual void printAttrs() const;
|
virtual void printAttrs() const;
|
||||||
virtual bool scanAttr( const String prmName, const String val );
|
virtual bool scanAttr( const std::string prmName, const std::string val );
|
||||||
String name;
|
std::string name;
|
||||||
};
|
};
|
||||||
|
|
||||||
class CvFeatureParams : public CvParams
|
class CvFeatureParams : public CvParams
|
||||||
@@ -68,9 +68,9 @@ public:
|
|||||||
enum { HAAR = 0, LBP = 1, HOG = 2 };
|
enum { HAAR = 0, LBP = 1, HOG = 2 };
|
||||||
CvFeatureParams();
|
CvFeatureParams();
|
||||||
virtual void init( const CvFeatureParams& fp );
|
virtual void init( const CvFeatureParams& fp );
|
||||||
virtual void write( FileStorage &fs ) const;
|
virtual void write( cv::FileStorage &fs ) const;
|
||||||
virtual bool read( const FileNode &node );
|
virtual bool read( const cv::FileNode &node );
|
||||||
static Ptr<CvFeatureParams> create( int featureType );
|
static cv::Ptr<CvFeatureParams> create( int featureType );
|
||||||
int maxCatCount; // 0 in case of numerical features
|
int maxCatCount; // 0 in case of numerical features
|
||||||
int featSize; // 1 in case of simple features (HAAR, LBP) and N_BINS(9)*N_CELLS(4) in case of Dalal's HOG features
|
int featSize; // 1 in case of simple features (HAAR, LBP) and N_BINS(9)*N_CELLS(4) in case of Dalal's HOG features
|
||||||
};
|
};
|
||||||
@@ -80,25 +80,25 @@ class CvFeatureEvaluator
|
|||||||
public:
|
public:
|
||||||
virtual ~CvFeatureEvaluator() {}
|
virtual ~CvFeatureEvaluator() {}
|
||||||
virtual void init(const CvFeatureParams *_featureParams,
|
virtual void init(const CvFeatureParams *_featureParams,
|
||||||
int _maxSampleCount, Size _winSize );
|
int _maxSampleCount, cv::Size _winSize );
|
||||||
virtual void setImage(const Mat& img, uchar clsLabel, int idx);
|
virtual void setImage(const cv::Mat& img, uchar clsLabel, int idx);
|
||||||
virtual void writeFeatures( FileStorage &fs, const Mat& featureMap ) const = 0;
|
virtual void writeFeatures( cv::FileStorage &fs, const cv::Mat& featureMap ) const = 0;
|
||||||
virtual float operator()(int featureIdx, int sampleIdx) const = 0;
|
virtual float operator()(int featureIdx, int sampleIdx) const = 0;
|
||||||
static Ptr<CvFeatureEvaluator> create(int type);
|
static cv::Ptr<CvFeatureEvaluator> create(int type);
|
||||||
|
|
||||||
int getNumFeatures() const { return numFeatures; }
|
int getNumFeatures() const { return numFeatures; }
|
||||||
int getMaxCatCount() const { return featureParams->maxCatCount; }
|
int getMaxCatCount() const { return featureParams->maxCatCount; }
|
||||||
int getFeatureSize() const { return featureParams->featSize; }
|
int getFeatureSize() const { return featureParams->featSize; }
|
||||||
const Mat& getCls() const { return cls; }
|
const cv::Mat& getCls() const { return cls; }
|
||||||
float getCls(int si) const { return cls.at<float>(si, 0); }
|
float getCls(int si) const { return cls.at<float>(si, 0); }
|
||||||
protected:
|
protected:
|
||||||
virtual void generateFeatures() = 0;
|
virtual void generateFeatures() = 0;
|
||||||
|
|
||||||
int npos, nneg;
|
int npos, nneg;
|
||||||
int numFeatures;
|
int numFeatures;
|
||||||
Size winSize;
|
cv::Size winSize;
|
||||||
CvFeatureParams *featureParams;
|
CvFeatureParams *featureParams;
|
||||||
Mat cls;
|
cv::Mat cls;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
+160
-237
@@ -31,10 +31,8 @@
|
|||||||
# The following variables affect the behavior of the macros in the
|
# The following variables affect the behavior of the macros in the
|
||||||
# script (in alphebetical order). Note that any of these flags can be
|
# script (in alphebetical order). Note that any of these flags can be
|
||||||
# changed multiple times in the same directory before calling
|
# changed multiple times in the same directory before calling
|
||||||
# CUDA_ADD_EXECUTABLE, CUDA_ADD_LIBRARY, CUDA_COMPILE, CUDA_COMPILE_PTX
|
# CUDA_ADD_EXECUTABLE, CUDA_ADD_LIBRARY, CUDA_COMPILE, CUDA_COMPILE_PTX,
|
||||||
# or CUDA_WRAP_SRCS.
|
# CUDA_COMPILE_FATBIN, CUDA_COMPILE_CUBIN or CUDA_WRAP_SRCS::
|
||||||
#
|
|
||||||
# ::
|
|
||||||
#
|
#
|
||||||
# CUDA_64_BIT_DEVICE_CODE (Default matches host bit size)
|
# CUDA_64_BIT_DEVICE_CODE (Default matches host bit size)
|
||||||
# -- Set to ON to compile for 64 bit device code, OFF for 32 bit device code.
|
# -- Set to ON to compile for 64 bit device code, OFF for 32 bit device code.
|
||||||
@@ -43,19 +41,11 @@
|
|||||||
# nvcc in the generated source. If you compile to PTX and then load the
|
# nvcc in the generated source. If you compile to PTX and then load the
|
||||||
# file yourself, you can mix bit sizes between device and host.
|
# file yourself, you can mix bit sizes between device and host.
|
||||||
#
|
#
|
||||||
#
|
|
||||||
#
|
|
||||||
# ::
|
|
||||||
#
|
|
||||||
# CUDA_ATTACH_VS_BUILD_RULE_TO_CUDA_FILE (Default ON)
|
# CUDA_ATTACH_VS_BUILD_RULE_TO_CUDA_FILE (Default ON)
|
||||||
# -- Set to ON if you want the custom build rule to be attached to the source
|
# -- Set to ON if you want the custom build rule to be attached to the source
|
||||||
# file in Visual Studio. Turn OFF if you add the same cuda file to multiple
|
# file in Visual Studio. Turn OFF if you add the same cuda file to multiple
|
||||||
# targets.
|
# targets.
|
||||||
#
|
#
|
||||||
#
|
|
||||||
#
|
|
||||||
# ::
|
|
||||||
#
|
|
||||||
# This allows the user to build the target from the CUDA file; however, bad
|
# This allows the user to build the target from the CUDA file; however, bad
|
||||||
# things can happen if the CUDA source file is added to multiple targets.
|
# things can happen if the CUDA source file is added to multiple targets.
|
||||||
# When performing parallel builds it is possible for the custom build
|
# When performing parallel builds it is possible for the custom build
|
||||||
@@ -68,44 +58,24 @@
|
|||||||
# this script could detect the reuse of source files across multiple targets
|
# this script could detect the reuse of source files across multiple targets
|
||||||
# and turn the option off for the user, but no good solution could be found.
|
# and turn the option off for the user, but no good solution could be found.
|
||||||
#
|
#
|
||||||
#
|
|
||||||
#
|
|
||||||
# ::
|
|
||||||
#
|
|
||||||
# CUDA_BUILD_CUBIN (Default OFF)
|
# CUDA_BUILD_CUBIN (Default OFF)
|
||||||
# -- Set to ON to enable and extra compilation pass with the -cubin option in
|
# -- Set to ON to enable and extra compilation pass with the -cubin option in
|
||||||
# Device mode. The output is parsed and register, shared memory usage is
|
# Device mode. The output is parsed and register, shared memory usage is
|
||||||
# printed during build.
|
# printed during build.
|
||||||
#
|
#
|
||||||
#
|
|
||||||
#
|
|
||||||
# ::
|
|
||||||
#
|
|
||||||
# CUDA_BUILD_EMULATION (Default OFF for device mode)
|
# CUDA_BUILD_EMULATION (Default OFF for device mode)
|
||||||
# -- Set to ON for Emulation mode. -D_DEVICEEMU is defined for CUDA C files
|
# -- Set to ON for Emulation mode. -D_DEVICEEMU is defined for CUDA C files
|
||||||
# when CUDA_BUILD_EMULATION is TRUE.
|
# when CUDA_BUILD_EMULATION is TRUE.
|
||||||
#
|
#
|
||||||
#
|
|
||||||
#
|
|
||||||
# ::
|
|
||||||
#
|
|
||||||
# CUDA_GENERATED_OUTPUT_DIR (Default CMAKE_CURRENT_BINARY_DIR)
|
# CUDA_GENERATED_OUTPUT_DIR (Default CMAKE_CURRENT_BINARY_DIR)
|
||||||
# -- Set to the path you wish to have the generated files placed. If it is
|
# -- Set to the path you wish to have the generated files placed. If it is
|
||||||
# blank output files will be placed in CMAKE_CURRENT_BINARY_DIR.
|
# blank output files will be placed in CMAKE_CURRENT_BINARY_DIR.
|
||||||
# Intermediate files will always be placed in
|
# Intermediate files will always be placed in
|
||||||
# CMAKE_CURRENT_BINARY_DIR/CMakeFiles.
|
# CMAKE_CURRENT_BINARY_DIR/CMakeFiles.
|
||||||
#
|
#
|
||||||
#
|
|
||||||
#
|
|
||||||
# ::
|
|
||||||
#
|
|
||||||
# CUDA_HOST_COMPILATION_CPP (Default ON)
|
# CUDA_HOST_COMPILATION_CPP (Default ON)
|
||||||
# -- Set to OFF for C compilation of host code.
|
# -- Set to OFF for C compilation of host code.
|
||||||
#
|
#
|
||||||
#
|
|
||||||
#
|
|
||||||
# ::
|
|
||||||
#
|
|
||||||
# CUDA_HOST_COMPILER (Default CMAKE_C_COMPILER, $(VCInstallDir)/bin for VS)
|
# CUDA_HOST_COMPILER (Default CMAKE_C_COMPILER, $(VCInstallDir)/bin for VS)
|
||||||
# -- Set the host compiler to be used by nvcc. Ignored if -ccbin or
|
# -- Set the host compiler to be used by nvcc. Ignored if -ccbin or
|
||||||
# --compiler-bindir is already present in the CUDA_NVCC_FLAGS or
|
# --compiler-bindir is already present in the CUDA_NVCC_FLAGS or
|
||||||
@@ -113,19 +83,11 @@
|
|||||||
# $(VCInstallDir)/bin is a special value that expands out to the path when
|
# $(VCInstallDir)/bin is a special value that expands out to the path when
|
||||||
# the command is run from withing VS.
|
# the command is run from withing VS.
|
||||||
#
|
#
|
||||||
#
|
|
||||||
#
|
|
||||||
# ::
|
|
||||||
#
|
|
||||||
# CUDA_NVCC_FLAGS
|
# CUDA_NVCC_FLAGS
|
||||||
# CUDA_NVCC_FLAGS_<CONFIG>
|
# CUDA_NVCC_FLAGS_<CONFIG>
|
||||||
# -- Additional NVCC command line arguments. NOTE: multiple arguments must be
|
# -- Additional NVCC command line arguments. NOTE: multiple arguments must be
|
||||||
# semi-colon delimited (e.g. --compiler-options;-Wall)
|
# semi-colon delimited (e.g. --compiler-options;-Wall)
|
||||||
#
|
#
|
||||||
#
|
|
||||||
#
|
|
||||||
# ::
|
|
||||||
#
|
|
||||||
# CUDA_PROPAGATE_HOST_FLAGS (Default ON)
|
# CUDA_PROPAGATE_HOST_FLAGS (Default ON)
|
||||||
# -- Set to ON to propagate CMAKE_{C,CXX}_FLAGS and their configuration
|
# -- Set to ON to propagate CMAKE_{C,CXX}_FLAGS and their configuration
|
||||||
# dependent counterparts (e.g. CMAKE_C_FLAGS_DEBUG) automatically to the
|
# dependent counterparts (e.g. CMAKE_C_FLAGS_DEBUG) automatically to the
|
||||||
@@ -137,10 +99,6 @@
|
|||||||
# CUDA_ADD_LIBRARY, CUDA_ADD_EXECUTABLE, or CUDA_WRAP_SRCS. Flags used for
|
# CUDA_ADD_LIBRARY, CUDA_ADD_EXECUTABLE, or CUDA_WRAP_SRCS. Flags used for
|
||||||
# shared library compilation are not affected by this flag.
|
# shared library compilation are not affected by this flag.
|
||||||
#
|
#
|
||||||
#
|
|
||||||
#
|
|
||||||
# ::
|
|
||||||
#
|
|
||||||
# CUDA_SEPARABLE_COMPILATION (Default OFF)
|
# CUDA_SEPARABLE_COMPILATION (Default OFF)
|
||||||
# -- If set this will enable separable compilation for all CUDA runtime object
|
# -- If set this will enable separable compilation for all CUDA runtime object
|
||||||
# files. If used outside of CUDA_ADD_EXECUTABLE and CUDA_ADD_LIBRARY
|
# files. If used outside of CUDA_ADD_EXECUTABLE and CUDA_ADD_LIBRARY
|
||||||
@@ -148,38 +106,22 @@
|
|||||||
# CUDA_COMPUTE_SEPARABLE_COMPILATION_OBJECT_FILE_NAME and
|
# CUDA_COMPUTE_SEPARABLE_COMPILATION_OBJECT_FILE_NAME and
|
||||||
# CUDA_LINK_SEPARABLE_COMPILATION_OBJECTS should be called.
|
# CUDA_LINK_SEPARABLE_COMPILATION_OBJECTS should be called.
|
||||||
#
|
#
|
||||||
#
|
|
||||||
#
|
|
||||||
# ::
|
|
||||||
#
|
|
||||||
# CUDA_VERBOSE_BUILD (Default OFF)
|
# CUDA_VERBOSE_BUILD (Default OFF)
|
||||||
# -- Set to ON to see all the commands used when building the CUDA file. When
|
# -- Set to ON to see all the commands used when building the CUDA file. When
|
||||||
# using a Makefile generator the value defaults to VERBOSE (run make
|
# using a Makefile generator the value defaults to VERBOSE (run make
|
||||||
# VERBOSE=1 to see output), although setting CUDA_VERBOSE_BUILD to ON will
|
# VERBOSE=1 to see output), although setting CUDA_VERBOSE_BUILD to ON will
|
||||||
# always print the output.
|
# always print the output.
|
||||||
#
|
#
|
||||||
#
|
# The script creates the following macros (in alphebetical order)::
|
||||||
#
|
|
||||||
# The script creates the following macros (in alphebetical order):
|
|
||||||
#
|
|
||||||
# ::
|
|
||||||
#
|
#
|
||||||
# CUDA_ADD_CUFFT_TO_TARGET( cuda_target )
|
# CUDA_ADD_CUFFT_TO_TARGET( cuda_target )
|
||||||
# -- Adds the cufft library to the target (can be any target). Handles whether
|
# -- Adds the cufft library to the target (can be any target). Handles whether
|
||||||
# you are in emulation mode or not.
|
# you are in emulation mode or not.
|
||||||
#
|
#
|
||||||
#
|
|
||||||
#
|
|
||||||
# ::
|
|
||||||
#
|
|
||||||
# CUDA_ADD_CUBLAS_TO_TARGET( cuda_target )
|
# CUDA_ADD_CUBLAS_TO_TARGET( cuda_target )
|
||||||
# -- Adds the cublas library to the target (can be any target). Handles
|
# -- Adds the cublas library to the target (can be any target). Handles
|
||||||
# whether you are in emulation mode or not.
|
# whether you are in emulation mode or not.
|
||||||
#
|
#
|
||||||
#
|
|
||||||
#
|
|
||||||
# ::
|
|
||||||
#
|
|
||||||
# CUDA_ADD_EXECUTABLE( cuda_target file0 file1 ...
|
# CUDA_ADD_EXECUTABLE( cuda_target file0 file1 ...
|
||||||
# [WIN32] [MACOSX_BUNDLE] [EXCLUDE_FROM_ALL] [OPTIONS ...] )
|
# [WIN32] [MACOSX_BUNDLE] [EXCLUDE_FROM_ALL] [OPTIONS ...] )
|
||||||
# -- Creates an executable "cuda_target" which is made up of the files
|
# -- Creates an executable "cuda_target" which is made up of the files
|
||||||
@@ -193,42 +135,28 @@
|
|||||||
# nvcc. Such flags should be modified before calling CUDA_ADD_EXECUTABLE,
|
# nvcc. Such flags should be modified before calling CUDA_ADD_EXECUTABLE,
|
||||||
# CUDA_ADD_LIBRARY or CUDA_WRAP_SRCS.
|
# CUDA_ADD_LIBRARY or CUDA_WRAP_SRCS.
|
||||||
#
|
#
|
||||||
#
|
|
||||||
#
|
|
||||||
# ::
|
|
||||||
#
|
|
||||||
# CUDA_ADD_LIBRARY( cuda_target file0 file1 ...
|
# CUDA_ADD_LIBRARY( cuda_target file0 file1 ...
|
||||||
# [STATIC | SHARED | MODULE] [EXCLUDE_FROM_ALL] [OPTIONS ...] )
|
# [STATIC | SHARED | MODULE] [EXCLUDE_FROM_ALL] [OPTIONS ...] )
|
||||||
# -- Same as CUDA_ADD_EXECUTABLE except that a library is created.
|
# -- Same as CUDA_ADD_EXECUTABLE except that a library is created.
|
||||||
#
|
#
|
||||||
#
|
|
||||||
#
|
|
||||||
# ::
|
|
||||||
#
|
|
||||||
# CUDA_BUILD_CLEAN_TARGET()
|
# CUDA_BUILD_CLEAN_TARGET()
|
||||||
# -- Creates a convience target that deletes all the dependency files
|
# -- Creates a convience target that deletes all the dependency files
|
||||||
# generated. You should make clean after running this target to ensure the
|
# generated. You should make clean after running this target to ensure the
|
||||||
# dependency files get regenerated.
|
# dependency files get regenerated.
|
||||||
#
|
#
|
||||||
#
|
|
||||||
#
|
|
||||||
# ::
|
|
||||||
#
|
|
||||||
# CUDA_COMPILE( generated_files file0 file1 ... [STATIC | SHARED | MODULE]
|
# CUDA_COMPILE( generated_files file0 file1 ... [STATIC | SHARED | MODULE]
|
||||||
# [OPTIONS ...] )
|
# [OPTIONS ...] )
|
||||||
# -- Returns a list of generated files from the input source files to be used
|
# -- Returns a list of generated files from the input source files to be used
|
||||||
# with ADD_LIBRARY or ADD_EXECUTABLE.
|
# with ADD_LIBRARY or ADD_EXECUTABLE.
|
||||||
#
|
#
|
||||||
#
|
|
||||||
#
|
|
||||||
# ::
|
|
||||||
#
|
|
||||||
# CUDA_COMPILE_PTX( generated_files file0 file1 ... [OPTIONS ...] )
|
# CUDA_COMPILE_PTX( generated_files file0 file1 ... [OPTIONS ...] )
|
||||||
# -- Returns a list of PTX files generated from the input source files.
|
# -- Returns a list of PTX files generated from the input source files.
|
||||||
#
|
#
|
||||||
|
# CUDA_COMPILE_FATBIN( generated_files file0 file1 ... [OPTIONS ...] )
|
||||||
|
# -- Returns a list of FATBIN files generated from the input source files.
|
||||||
#
|
#
|
||||||
#
|
# CUDA_COMPILE_CUBIN( generated_files file0 file1 ... [OPTIONS ...] )
|
||||||
# ::
|
# -- Returns a list of CUBIN files generated from the input source files.
|
||||||
#
|
#
|
||||||
# CUDA_COMPUTE_SEPARABLE_COMPILATION_OBJECT_FILE_NAME( output_file_var
|
# CUDA_COMPUTE_SEPARABLE_COMPILATION_OBJECT_FILE_NAME( output_file_var
|
||||||
# cuda_target
|
# cuda_target
|
||||||
@@ -242,10 +170,6 @@
|
|||||||
# automatically for CUDA_ADD_LIBRARY and CUDA_ADD_EXECUTABLE. Note that
|
# automatically for CUDA_ADD_LIBRARY and CUDA_ADD_EXECUTABLE. Note that
|
||||||
# this is a function and not a macro.
|
# this is a function and not a macro.
|
||||||
#
|
#
|
||||||
#
|
|
||||||
#
|
|
||||||
# ::
|
|
||||||
#
|
|
||||||
# CUDA_INCLUDE_DIRECTORIES( path0 path1 ... )
|
# CUDA_INCLUDE_DIRECTORIES( path0 path1 ... )
|
||||||
# -- Sets the directories that should be passed to nvcc
|
# -- Sets the directories that should be passed to nvcc
|
||||||
# (e.g. nvcc -Ipath0 -Ipath1 ... ). These paths usually contain other .cu
|
# (e.g. nvcc -Ipath0 -Ipath1 ... ). These paths usually contain other .cu
|
||||||
@@ -253,17 +177,9 @@
|
|||||||
#
|
#
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
#
|
|
||||||
#
|
|
||||||
# ::
|
|
||||||
#
|
|
||||||
# CUDA_LINK_SEPARABLE_COMPILATION_OBJECTS( output_file_var cuda_target
|
# CUDA_LINK_SEPARABLE_COMPILATION_OBJECTS( output_file_var cuda_target
|
||||||
# nvcc_flags object_files)
|
# nvcc_flags object_files)
|
||||||
#
|
#
|
||||||
#
|
|
||||||
#
|
|
||||||
# ::
|
|
||||||
#
|
|
||||||
# -- Generates the link object required by separable compilation from the given
|
# -- Generates the link object required by separable compilation from the given
|
||||||
# object files. This is called automatically for CUDA_ADD_EXECUTABLE and
|
# object files. This is called automatically for CUDA_ADD_EXECUTABLE and
|
||||||
# CUDA_ADD_LIBRARY, but can be called manually when using CUDA_WRAP_SRCS
|
# CUDA_ADD_LIBRARY, but can be called manually when using CUDA_WRAP_SRCS
|
||||||
@@ -273,91 +189,51 @@
|
|||||||
# specified by CUDA_64_BIT_DEVICE_CODE. Note that this is a function
|
# specified by CUDA_64_BIT_DEVICE_CODE. Note that this is a function
|
||||||
# instead of a macro.
|
# instead of a macro.
|
||||||
#
|
#
|
||||||
#
|
|
||||||
#
|
|
||||||
# ::
|
|
||||||
#
|
|
||||||
# CUDA_WRAP_SRCS ( cuda_target format generated_files file0 file1 ...
|
# CUDA_WRAP_SRCS ( cuda_target format generated_files file0 file1 ...
|
||||||
# [STATIC | SHARED | MODULE] [OPTIONS ...] )
|
# [STATIC | SHARED | MODULE] [OPTIONS ...] )
|
||||||
# -- This is where all the magic happens. CUDA_ADD_EXECUTABLE,
|
# -- This is where all the magic happens. CUDA_ADD_EXECUTABLE,
|
||||||
# CUDA_ADD_LIBRARY, CUDA_COMPILE, and CUDA_COMPILE_PTX all call this
|
# CUDA_ADD_LIBRARY, CUDA_COMPILE, and CUDA_COMPILE_PTX all call this
|
||||||
# function under the hood.
|
# function under the hood.
|
||||||
#
|
#
|
||||||
#
|
|
||||||
#
|
|
||||||
# ::
|
|
||||||
#
|
|
||||||
# Given the list of files (file0 file1 ... fileN) this macro generates
|
# Given the list of files (file0 file1 ... fileN) this macro generates
|
||||||
# custom commands that generate either PTX or linkable objects (use "PTX" or
|
# custom commands that generate either PTX or linkable objects (use "PTX" or
|
||||||
# "OBJ" for the format argument to switch). Files that don't end with .cu
|
# "OBJ" for the format argument to switch). Files that don't end with .cu
|
||||||
# or have the HEADER_FILE_ONLY property are ignored.
|
# or have the HEADER_FILE_ONLY property are ignored.
|
||||||
#
|
#
|
||||||
#
|
|
||||||
#
|
|
||||||
# ::
|
|
||||||
#
|
|
||||||
# The arguments passed in after OPTIONS are extra command line options to
|
# The arguments passed in after OPTIONS are extra command line options to
|
||||||
# give to nvcc. You can also specify per configuration options by
|
# give to nvcc. You can also specify per configuration options by
|
||||||
# specifying the name of the configuration followed by the options. General
|
# specifying the name of the configuration followed by the options. General
|
||||||
# options must preceed configuration specific options. Not all
|
# options must preceed configuration specific options. Not all
|
||||||
# configurations need to be specified, only the ones provided will be used.
|
# configurations need to be specified, only the ones provided will be used.
|
||||||
#
|
#
|
||||||
#
|
|
||||||
#
|
|
||||||
# ::
|
|
||||||
#
|
|
||||||
# OPTIONS -DFLAG=2 "-DFLAG_OTHER=space in flag"
|
# OPTIONS -DFLAG=2 "-DFLAG_OTHER=space in flag"
|
||||||
# DEBUG -g
|
# DEBUG -g
|
||||||
# RELEASE --use_fast_math
|
# RELEASE --use_fast_math
|
||||||
# RELWITHDEBINFO --use_fast_math;-g
|
# RELWITHDEBINFO --use_fast_math;-g
|
||||||
# MINSIZEREL --use_fast_math
|
# MINSIZEREL --use_fast_math
|
||||||
#
|
#
|
||||||
#
|
|
||||||
#
|
|
||||||
# ::
|
|
||||||
#
|
|
||||||
# For certain configurations (namely VS generating object files with
|
# For certain configurations (namely VS generating object files with
|
||||||
# CUDA_ATTACH_VS_BUILD_RULE_TO_CUDA_FILE set to ON), no generated file will
|
# CUDA_ATTACH_VS_BUILD_RULE_TO_CUDA_FILE set to ON), no generated file will
|
||||||
# be produced for the given cuda file. This is because when you add the
|
# be produced for the given cuda file. This is because when you add the
|
||||||
# cuda file to Visual Studio it knows that this file produces an object file
|
# cuda file to Visual Studio it knows that this file produces an object file
|
||||||
# and will link in the resulting object file automatically.
|
# and will link in the resulting object file automatically.
|
||||||
#
|
#
|
||||||
#
|
|
||||||
#
|
|
||||||
# ::
|
|
||||||
#
|
|
||||||
# This script will also generate a separate cmake script that is used at
|
# This script will also generate a separate cmake script that is used at
|
||||||
# build time to invoke nvcc. This is for several reasons.
|
# build time to invoke nvcc. This is for several reasons.
|
||||||
#
|
#
|
||||||
#
|
|
||||||
#
|
|
||||||
# ::
|
|
||||||
#
|
|
||||||
# 1. nvcc can return negative numbers as return values which confuses
|
# 1. nvcc can return negative numbers as return values which confuses
|
||||||
# Visual Studio into thinking that the command succeeded. The script now
|
# Visual Studio into thinking that the command succeeded. The script now
|
||||||
# checks the error codes and produces errors when there was a problem.
|
# checks the error codes and produces errors when there was a problem.
|
||||||
#
|
#
|
||||||
#
|
|
||||||
#
|
|
||||||
# ::
|
|
||||||
#
|
|
||||||
# 2. nvcc has been known to not delete incomplete results when it
|
# 2. nvcc has been known to not delete incomplete results when it
|
||||||
# encounters problems. This confuses build systems into thinking the
|
# encounters problems. This confuses build systems into thinking the
|
||||||
# target was generated when in fact an unusable file exists. The script
|
# target was generated when in fact an unusable file exists. The script
|
||||||
# now deletes the output files if there was an error.
|
# now deletes the output files if there was an error.
|
||||||
#
|
#
|
||||||
#
|
|
||||||
#
|
|
||||||
# ::
|
|
||||||
#
|
|
||||||
# 3. By putting all the options that affect the build into a file and then
|
# 3. By putting all the options that affect the build into a file and then
|
||||||
# make the build rule dependent on the file, the output files will be
|
# make the build rule dependent on the file, the output files will be
|
||||||
# regenerated when the options change.
|
# regenerated when the options change.
|
||||||
#
|
#
|
||||||
#
|
|
||||||
#
|
|
||||||
# ::
|
|
||||||
#
|
|
||||||
# This script also looks at optional arguments STATIC, SHARED, or MODULE to
|
# This script also looks at optional arguments STATIC, SHARED, or MODULE to
|
||||||
# determine when to target the object compilation for a shared library.
|
# determine when to target the object compilation for a shared library.
|
||||||
# BUILD_SHARED_LIBS is ignored in CUDA_WRAP_SRCS, but it is respected in
|
# BUILD_SHARED_LIBS is ignored in CUDA_WRAP_SRCS, but it is respected in
|
||||||
@@ -366,27 +242,17 @@
|
|||||||
# <target_name>_EXPORTS is defined when a shared library compilation is
|
# <target_name>_EXPORTS is defined when a shared library compilation is
|
||||||
# detected.
|
# detected.
|
||||||
#
|
#
|
||||||
#
|
|
||||||
#
|
|
||||||
# ::
|
|
||||||
#
|
|
||||||
# Flags passed into add_definitions with -D or /D are passed along to nvcc.
|
# Flags passed into add_definitions with -D or /D are passed along to nvcc.
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
# The script defines the following variables:
|
# The script defines the following variables::
|
||||||
#
|
|
||||||
# ::
|
|
||||||
#
|
#
|
||||||
# CUDA_VERSION_MAJOR -- The major version of cuda as reported by nvcc.
|
# CUDA_VERSION_MAJOR -- The major version of cuda as reported by nvcc.
|
||||||
# CUDA_VERSION_MINOR -- The minor version.
|
# CUDA_VERSION_MINOR -- The minor version.
|
||||||
# CUDA_VERSION
|
# CUDA_VERSION
|
||||||
# CUDA_VERSION_STRING -- CUDA_VERSION_MAJOR.CUDA_VERSION_MINOR
|
# CUDA_VERSION_STRING -- CUDA_VERSION_MAJOR.CUDA_VERSION_MINOR
|
||||||
#
|
#
|
||||||
#
|
|
||||||
#
|
|
||||||
# ::
|
|
||||||
#
|
|
||||||
# CUDA_TOOLKIT_ROOT_DIR -- Path to the CUDA Toolkit (defined if not set).
|
# CUDA_TOOLKIT_ROOT_DIR -- Path to the CUDA Toolkit (defined if not set).
|
||||||
# CUDA_SDK_ROOT_DIR -- Path to the CUDA SDK. Use this to find files in the
|
# CUDA_SDK_ROOT_DIR -- Path to the CUDA SDK. Use this to find files in the
|
||||||
# SDK. This script will not directly support finding
|
# SDK. This script will not directly support finding
|
||||||
@@ -412,13 +278,13 @@
|
|||||||
# Only available for CUDA version 3.2+.
|
# Only available for CUDA version 3.2+.
|
||||||
# CUDA_cusparse_LIBRARY -- CUDA Sparse Matrix library.
|
# CUDA_cusparse_LIBRARY -- CUDA Sparse Matrix library.
|
||||||
# Only available for CUDA version 3.2+.
|
# Only available for CUDA version 3.2+.
|
||||||
# CUDA_npp_LIBRARY -- NVIDIA Performance Primitives library.
|
# CUDA_npp_LIBRARY -- NVIDIA Performance Primitives lib.
|
||||||
# Only available for CUDA version 4.0+.
|
# Only available for CUDA version 4.0+.
|
||||||
# CUDA_nppc_LIBRARY -- NVIDIA Performance Primitives library (core).
|
# CUDA_nppc_LIBRARY -- NVIDIA Performance Primitives lib (core).
|
||||||
# Only available for CUDA version 5.5+.
|
# Only available for CUDA version 5.5+.
|
||||||
# CUDA_nppi_LIBRARY -- NVIDIA Performance Primitives library (image processing).
|
# CUDA_nppi_LIBRARY -- NVIDIA Performance Primitives lib (image processing).
|
||||||
# Only available for CUDA version 5.5+.
|
# Only available for CUDA version 5.5+.
|
||||||
# CUDA_npps_LIBRARY -- NVIDIA Performance Primitives library (signal processing).
|
# CUDA_npps_LIBRARY -- NVIDIA Performance Primitives lib (signal processing).
|
||||||
# Only available for CUDA version 5.5+.
|
# Only available for CUDA version 5.5+.
|
||||||
# CUDA_nvcuvenc_LIBRARY -- CUDA Video Encoder library.
|
# CUDA_nvcuvenc_LIBRARY -- CUDA Video Encoder library.
|
||||||
# Only available for CUDA version 3.2+.
|
# Only available for CUDA version 3.2+.
|
||||||
@@ -427,32 +293,15 @@
|
|||||||
# Only available for CUDA version 3.2+.
|
# Only available for CUDA version 3.2+.
|
||||||
# Windows only.
|
# Windows only.
|
||||||
#
|
#
|
||||||
#
|
|
||||||
#
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# ::
|
|
||||||
#
|
|
||||||
# James Bigler, NVIDIA Corp (nvidia.com - jbigler)
|
# James Bigler, NVIDIA Corp (nvidia.com - jbigler)
|
||||||
# Abe Stephens, SCI Institute -- http://www.sci.utah.edu/~abe/FindCuda.html
|
# Abe Stephens, SCI Institute -- http://www.sci.utah.edu/~abe/FindCuda.html
|
||||||
#
|
#
|
||||||
#
|
|
||||||
#
|
|
||||||
# ::
|
|
||||||
#
|
|
||||||
# Copyright (c) 2008 - 2009 NVIDIA Corporation. All rights reserved.
|
# Copyright (c) 2008 - 2009 NVIDIA Corporation. All rights reserved.
|
||||||
#
|
#
|
||||||
#
|
|
||||||
#
|
|
||||||
# ::
|
|
||||||
#
|
|
||||||
# Copyright (c) 2007-2009
|
# Copyright (c) 2007-2009
|
||||||
# Scientific Computing and Imaging Institute, University of Utah
|
# Scientific Computing and Imaging Institute, University of Utah
|
||||||
#
|
#
|
||||||
#
|
|
||||||
#
|
|
||||||
# ::
|
|
||||||
#
|
|
||||||
# This code is licensed under the MIT License. See the FindCUDA.cmake script
|
# This code is licensed under the MIT License. See the FindCUDA.cmake script
|
||||||
# for the text of the license.
|
# for the text of the license.
|
||||||
|
|
||||||
@@ -481,11 +330,6 @@
|
|||||||
|
|
||||||
# FindCUDA.cmake
|
# FindCUDA.cmake
|
||||||
|
|
||||||
# We need to have at least this version to support the VERSION_LESS argument to 'if' (2.6.2) and unset (2.6.3)
|
|
||||||
cmake_policy(PUSH)
|
|
||||||
cmake_minimum_required(VERSION 2.6.3)
|
|
||||||
cmake_policy(POP)
|
|
||||||
|
|
||||||
# This macro helps us find the location of helper files we will need the full path to
|
# This macro helps us find the location of helper files we will need the full path to
|
||||||
macro(CUDA_FIND_HELPER_FILE _name _extension)
|
macro(CUDA_FIND_HELPER_FILE _name _extension)
|
||||||
set(_full_name "${_name}.${_extension}")
|
set(_full_name "${_name}.${_extension}")
|
||||||
@@ -608,7 +452,17 @@ set(CUDA_NVCC_FLAGS "" CACHE STRING "Semi-colon delimit multiple arguments.")
|
|||||||
if(CMAKE_GENERATOR MATCHES "Visual Studio")
|
if(CMAKE_GENERATOR MATCHES "Visual Studio")
|
||||||
set(CUDA_HOST_COMPILER "$(VCInstallDir)bin" CACHE FILEPATH "Host side compiler used by NVCC")
|
set(CUDA_HOST_COMPILER "$(VCInstallDir)bin" CACHE FILEPATH "Host side compiler used by NVCC")
|
||||||
else()
|
else()
|
||||||
set(CUDA_HOST_COMPILER "${CMAKE_C_COMPILER}" CACHE FILEPATH "Host side compiler used by NVCC")
|
# Using cc which is symlink to clang may let NVCC think it is GCC and issue
|
||||||
|
# unhandled -dumpspecs option to clang. Also in case neither
|
||||||
|
# CMAKE_C_COMPILER is defined (project does not use C language) nor
|
||||||
|
# CUDA_HOST_COMPILER is specified manually we should skip -ccbin and let
|
||||||
|
# nvcc use its own default C compiler.
|
||||||
|
if(DEFINED CMAKE_C_COMPILER AND NOT DEFINED CUDA_HOST_COMPILER)
|
||||||
|
get_filename_component(c_compiler_realpath "${CMAKE_C_COMPILER}" REALPATH)
|
||||||
|
else()
|
||||||
|
set(c_compiler_realpath "")
|
||||||
|
endif()
|
||||||
|
set(CUDA_HOST_COMPILER "${c_compiler_realpath}" CACHE FILEPATH "Host side compiler used by NVCC")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Propagate the host flags to the host compiler via -Xcompiler
|
# Propagate the host flags to the host compiler via -Xcompiler
|
||||||
@@ -675,14 +529,16 @@ endmacro()
|
|||||||
|
|
||||||
# Check to see if the CUDA_TOOLKIT_ROOT_DIR and CUDA_SDK_ROOT_DIR have changed,
|
# Check to see if the CUDA_TOOLKIT_ROOT_DIR and CUDA_SDK_ROOT_DIR have changed,
|
||||||
# if they have then clear the cache variables, so that will be detected again.
|
# if they have then clear the cache variables, so that will be detected again.
|
||||||
if(NOT "${CUDA_TOOLKIT_ROOT_DIR}" STREQUAL "${CUDA_TOOLKIT_ROOT_DIR_INTERNAL}")
|
if(DEFINED CUDA_TOOLKIT_ROOT_DIR_INTERNAL AND (NOT "${CUDA_TOOLKIT_ROOT_DIR}" STREQUAL "${CUDA_TOOLKIT_ROOT_DIR_INTERNAL}"))
|
||||||
|
unset(CUDA_TARGET_TRIPLET CACHE)
|
||||||
unset(CUDA_TOOLKIT_TARGET_DIR CACHE)
|
unset(CUDA_TOOLKIT_TARGET_DIR CACHE)
|
||||||
unset(CUDA_NVCC_EXECUTABLE CACHE)
|
unset(CUDA_NVCC_EXECUTABLE CACHE)
|
||||||
unset(CUDA_VERSION CACHE)
|
unset(CUDA_VERSION CACHE)
|
||||||
cuda_unset_include_and_libraries()
|
cuda_unset_include_and_libraries()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(NOT "${CUDA_TOOLKIT_TARGET_DIR}" STREQUAL "${CUDA_TOOLKIT_TARGET_DIR_INTERNAL}")
|
if(DEFINED CUDA_TARGET_TRIPLET_INTERNAL AND (NOT "${CUDA_TARGET_TRIPLET}" STREQUAL "${CUDA_TARGET_TRIPLET_INTERNAL}") OR
|
||||||
|
(DEFINED CUDA_TOOLKIT_TARGET_DIR AND DEFINED CUDA_TOOLKIT_TARGET_DIR_INTERNAL AND NOT "${CUDA_TOOLKIT_TARGET_DIR}" STREQUAL "${CUDA_TOOLKIT_TARGET_DIR_INTERNAL}"))
|
||||||
cuda_unset_include_and_libraries()
|
cuda_unset_include_and_libraries()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
@@ -758,23 +614,54 @@ endif()
|
|||||||
# Always set this convenience variable
|
# Always set this convenience variable
|
||||||
set(CUDA_VERSION_STRING "${CUDA_VERSION}")
|
set(CUDA_VERSION_STRING "${CUDA_VERSION}")
|
||||||
|
|
||||||
# Support for arm cross compilation with CUDA 5.5
|
|
||||||
if(CUDA_VERSION VERSION_GREATER "5.0" AND CMAKE_CROSSCOMPILING AND ${CMAKE_SYSTEM_PROCESSOR} MATCHES "arm" AND EXISTS "${CUDA_TOOLKIT_ROOT_DIR}/targets/armv7-linux-gnueabihf")
|
|
||||||
set(CUDA_TOOLKIT_TARGET_DIR "${CUDA_TOOLKIT_ROOT_DIR}/targets/armv7-linux-gnueabihf" CACHE PATH "Toolkit target location.")
|
|
||||||
else()
|
|
||||||
set(CUDA_TOOLKIT_TARGET_DIR "${CUDA_TOOLKIT_ROOT_DIR}" CACHE PATH "Toolkit target location.")
|
|
||||||
endif()
|
|
||||||
mark_as_advanced(CUDA_TOOLKIT_TARGET_DIR)
|
|
||||||
|
|
||||||
# Target CPU architecture
|
# Target CPU architecture
|
||||||
if(CUDA_VERSION VERSION_GREATER "5.0" AND CMAKE_CROSSCOMPILING AND ${CMAKE_SYSTEM_PROCESSOR} MATCHES "arm")
|
if(DEFINED CUDA_TARGET_CPU_ARCH)
|
||||||
|
set(_cuda_target_cpu_arch_initial "${CUDA_TARGET_CPU_ARCH}")
|
||||||
|
elseif(CUDA_VERSION VERSION_GREATER "5.0" AND CMAKE_CROSSCOMPILING AND CMAKE_SYSTEM_PROCESSOR MATCHES "^(arm|ARM)")
|
||||||
set(_cuda_target_cpu_arch_initial "ARM")
|
set(_cuda_target_cpu_arch_initial "ARM")
|
||||||
|
elseif(CUDA_VERSION VERSION_GREATER "6.5" AND CMAKE_CROSSCOMPILING AND CMAKE_SYSTEM_PROCESSOR MATCHES "^(aarch64|AARCH64)")
|
||||||
|
set(_cuda_target_cpu_arch_initial "AARCH64")
|
||||||
else()
|
else()
|
||||||
set(_cuda_target_cpu_arch_initial "")
|
set(_cuda_target_cpu_arch_initial "")
|
||||||
endif()
|
endif()
|
||||||
set(CUDA_TARGET_CPU_ARCH ${_cuda_target_cpu_arch_initial} CACHE STRING "Specify the name of the class of CPU architecture for which the input files must be compiled.")
|
set(CUDA_TARGET_CPU_ARCH "${_cuda_target_cpu_arch_initial}" CACHE STRING "Specify the name of the class of CPU architecture for which the input files must be compiled.")
|
||||||
mark_as_advanced(CUDA_TARGET_CPU_ARCH)
|
mark_as_advanced(CUDA_TARGET_CPU_ARCH)
|
||||||
|
|
||||||
|
# Target OS variant
|
||||||
|
if(DEFINED CUDA_TARGET_OS_VARIANT)
|
||||||
|
set(_cuda_target_os_variant_initial "${CUDA_TARGET_OS_VARIANT}")
|
||||||
|
else()
|
||||||
|
set(_cuda_target_os_variant_initial "")
|
||||||
|
endif()
|
||||||
|
set(CUDA_TARGET_OS_VARIANT "${_cuda_target_os_variant_initial}" CACHE STRING "Specify the name of the class of OS for which the input files must be compiled.")
|
||||||
|
mark_as_advanced(CUDA_TARGET_OS_VARIANT)
|
||||||
|
|
||||||
|
# Target triplet
|
||||||
|
if(DEFINED CUDA_TARGET_TRIPLET)
|
||||||
|
set(_cuda_target_triplet_initial "${CUDA_TARGET_TRIPLET}")
|
||||||
|
elseif(CUDA_VERSION VERSION_GREATER "5.0" AND CMAKE_CROSSCOMPILING AND "${CUDA_TARGET_CPU_ARCH}" STREQUAL "ARM")
|
||||||
|
if("${CUDA_TARGET_OS_VARIANT}" STREQUAL "Android" AND EXISTS "${CUDA_TOOLKIT_ROOT_DIR}/targets/armv7-linux-androideabi")
|
||||||
|
set(_cuda_target_triplet_initial "armv7-linux-androideabi")
|
||||||
|
elseif(EXISTS "${CUDA_TOOLKIT_ROOT_DIR}/targets/armv7-linux-gnueabihf")
|
||||||
|
set(_cuda_target_triplet_initial "armv7-linux-gnueabihf")
|
||||||
|
endif()
|
||||||
|
elseif(CUDA_VERSION VERSION_GREATER "6.5" AND CMAKE_CROSSCOMPILING AND "${CUDA_TARGET_CPU_ARCH}" STREQUAL "AARCH64")
|
||||||
|
if("${CUDA_TARGET_OS_VARIANT}" STREQUAL "Android" AND EXISTS "${CUDA_TOOLKIT_ROOT_DIR}/targets/aarch64-linux-androideabi")
|
||||||
|
set(_cuda_target_triplet_initial "aarch64-linux-androideabi")
|
||||||
|
elseif(EXISTS "${CUDA_TOOLKIT_ROOT_DIR}/targets/aarch64-linux-gnueabihf")
|
||||||
|
set(_cuda_target_triplet_initial "aarch64-linux-gnueabihf")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
set(CUDA_TARGET_TRIPLET "${_cuda_target_triplet_initial}" CACHE STRING "Specify the target triplet for which the input files must be compiled.")
|
||||||
|
file(GLOB __cuda_available_target_tiplets RELATIVE "${CUDA_TOOLKIT_ROOT_DIR}/targets" "${CUDA_TOOLKIT_ROOT_DIR}/targets/*" )
|
||||||
|
set_property(CACHE CUDA_TARGET_TRIPLET PROPERTY STRINGS ${__cuda_available_target_tiplets})
|
||||||
|
mark_as_advanced(CUDA_TARGET_TRIPLET)
|
||||||
|
|
||||||
|
# Target directory
|
||||||
|
if(NOT DEFINED CUDA_TOOLKIT_TARGET_DIR AND CUDA_TARGET_TRIPLET AND EXISTS "${CUDA_TOOLKIT_ROOT_DIR}/targets/${CUDA_TARGET_TRIPLET}")
|
||||||
|
set(CUDA_TOOLKIT_TARGET_DIR "${CUDA_TOOLKIT_ROOT_DIR}/targets/${CUDA_TARGET_TRIPLET}")
|
||||||
|
endif()
|
||||||
|
|
||||||
# CUDA_TOOLKIT_INCLUDE
|
# CUDA_TOOLKIT_INCLUDE
|
||||||
find_path(CUDA_TOOLKIT_INCLUDE
|
find_path(CUDA_TOOLKIT_INCLUDE
|
||||||
device_functions.h # Header included in toolkit
|
device_functions.h # Header included in toolkit
|
||||||
@@ -798,10 +685,16 @@ macro(cuda_find_library_local_first_with_path_ext _var _names _doc _path_ext )
|
|||||||
# and old paths.
|
# and old paths.
|
||||||
set(_cuda_64bit_lib_dir "${_path_ext}lib/x64" "${_path_ext}lib64" "${_path_ext}libx64" )
|
set(_cuda_64bit_lib_dir "${_path_ext}lib/x64" "${_path_ext}lib64" "${_path_ext}libx64" )
|
||||||
endif()
|
endif()
|
||||||
|
if(CUDA_VERSION VERSION_GREATER "6.0")
|
||||||
|
set(_cuda_static_lib_names "")
|
||||||
|
foreach(name ${_names})
|
||||||
|
list(APPEND _cuda_static_lib_names "${name}_static")
|
||||||
|
endforeach()
|
||||||
|
endif()
|
||||||
# CUDA 3.2+ on Windows moved the library directories, so we need to new
|
# CUDA 3.2+ on Windows moved the library directories, so we need to new
|
||||||
# (lib/Win32) and the old path (lib).
|
# (lib/Win32) and the old path (lib).
|
||||||
find_library(${_var}
|
find_library(${_var}
|
||||||
NAMES ${_names}
|
NAMES ${_names} ${_cuda_static_lib_names}
|
||||||
PATHS "${CUDA_TOOLKIT_TARGET_DIR}" "${CUDA_TOOLKIT_ROOT_DIR}"
|
PATHS "${CUDA_TOOLKIT_TARGET_DIR}" "${CUDA_TOOLKIT_ROOT_DIR}"
|
||||||
ENV CUDA_PATH
|
ENV CUDA_PATH
|
||||||
ENV CUDA_LIB_PATH
|
ENV CUDA_LIB_PATH
|
||||||
@@ -811,7 +704,7 @@ macro(cuda_find_library_local_first_with_path_ext _var _names _doc _path_ext )
|
|||||||
)
|
)
|
||||||
# Search default search paths, after we search our own set of paths.
|
# Search default search paths, after we search our own set of paths.
|
||||||
find_library(${_var}
|
find_library(${_var}
|
||||||
NAMES ${_names}
|
NAMES ${_names} ${_cuda_static_lib_names}
|
||||||
PATHS "/usr/lib/nvidia-current"
|
PATHS "/usr/lib/nvidia-current"
|
||||||
DOC ${_doc}
|
DOC ${_doc}
|
||||||
)
|
)
|
||||||
@@ -849,18 +742,6 @@ if(CUDA_BUILD_EMULATION AND CUDA_CUDARTEMU_LIBRARY)
|
|||||||
else()
|
else()
|
||||||
set(CUDA_LIBRARIES ${CUDA_CUDART_LIBRARY})
|
set(CUDA_LIBRARIES ${CUDA_CUDART_LIBRARY})
|
||||||
endif()
|
endif()
|
||||||
if(APPLE)
|
|
||||||
# We need to add the path to cudart to the linker using rpath, since the
|
|
||||||
# library name for the cuda libraries is prepended with @rpath.
|
|
||||||
if(CUDA_BUILD_EMULATION AND CUDA_CUDARTEMU_LIBRARY)
|
|
||||||
get_filename_component(_cuda_path_to_cudart "${CUDA_CUDARTEMU_LIBRARY}" PATH)
|
|
||||||
else()
|
|
||||||
get_filename_component(_cuda_path_to_cudart "${CUDA_CUDART_LIBRARY}" PATH)
|
|
||||||
endif()
|
|
||||||
if(_cuda_path_to_cudart)
|
|
||||||
list(APPEND CUDA_LIBRARIES -Wl,-rpath "-Wl,${_cuda_path_to_cudart}")
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# 1.1 toolkit on linux doesn't appear to have a separate library on
|
# 1.1 toolkit on linux doesn't appear to have a separate library on
|
||||||
# some platforms.
|
# some platforms.
|
||||||
@@ -993,6 +874,8 @@ set(CUDA_FOUND TRUE)
|
|||||||
|
|
||||||
set(CUDA_TOOLKIT_ROOT_DIR_INTERNAL "${CUDA_TOOLKIT_ROOT_DIR}" CACHE INTERNAL
|
set(CUDA_TOOLKIT_ROOT_DIR_INTERNAL "${CUDA_TOOLKIT_ROOT_DIR}" CACHE INTERNAL
|
||||||
"This is the value of the last time CUDA_TOOLKIT_ROOT_DIR was set successfully." FORCE)
|
"This is the value of the last time CUDA_TOOLKIT_ROOT_DIR was set successfully." FORCE)
|
||||||
|
set(CUDA_TARGET_TRIPLET_INTERNAL "${CUDA_TARGET_TRIPLET}" CACHE INTERNAL
|
||||||
|
"This is the value of the last time CUDA_TARGET_TRIPLET was set successfully." FORCE)
|
||||||
set(CUDA_TOOLKIT_TARGET_DIR_INTERNAL "${CUDA_TOOLKIT_TARGET_DIR}" CACHE INTERNAL
|
set(CUDA_TOOLKIT_TARGET_DIR_INTERNAL "${CUDA_TOOLKIT_TARGET_DIR}" CACHE INTERNAL
|
||||||
"This is the value of the last time CUDA_TOOLKIT_TARGET_DIR was set successfully." FORCE)
|
"This is the value of the last time CUDA_TOOLKIT_TARGET_DIR was set successfully." FORCE)
|
||||||
set(CUDA_SDK_ROOT_DIR_INTERNAL "${CUDA_SDK_ROOT_DIR}" CACHE INTERNAL
|
set(CUDA_SDK_ROOT_DIR_INTERNAL "${CUDA_SDK_ROOT_DIR}" CACHE INTERNAL
|
||||||
@@ -1040,15 +923,15 @@ macro(CUDA_GET_SOURCES_AND_OPTIONS _sources _cmake_options _options)
|
|||||||
set( ${_options} )
|
set( ${_options} )
|
||||||
set( _found_options FALSE )
|
set( _found_options FALSE )
|
||||||
foreach(arg ${ARGN})
|
foreach(arg ${ARGN})
|
||||||
if(arg STREQUAL "OPTIONS")
|
if("x${arg}" STREQUAL "xOPTIONS")
|
||||||
set( _found_options TRUE )
|
set( _found_options TRUE )
|
||||||
elseif(
|
elseif(
|
||||||
arg STREQUAL "WIN32" OR
|
"x${arg}" STREQUAL "xWIN32" OR
|
||||||
arg STREQUAL "MACOSX_BUNDLE" OR
|
"x${arg}" STREQUAL "xMACOSX_BUNDLE" OR
|
||||||
arg STREQUAL "EXCLUDE_FROM_ALL" OR
|
"x${arg}" STREQUAL "xEXCLUDE_FROM_ALL" OR
|
||||||
arg STREQUAL "STATIC" OR
|
"x${arg}" STREQUAL "xSTATIC" OR
|
||||||
arg STREQUAL "SHARED" OR
|
"x${arg}" STREQUAL "xSHARED" OR
|
||||||
arg STREQUAL "MODULE"
|
"x${arg}" STREQUAL "xMODULE"
|
||||||
)
|
)
|
||||||
list(APPEND ${_cmake_options} ${arg})
|
list(APPEND ${_cmake_options} ${arg})
|
||||||
else()
|
else()
|
||||||
@@ -1144,7 +1027,7 @@ function(CUDA_COMPUTE_BUILD_PATH path build_path)
|
|||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# This recipie is from cmLocalGenerator::CreateSafeUniqueObjectFileName in the
|
# This recipe is from cmLocalGenerator::CreateSafeUniqueObjectFileName in the
|
||||||
# CMake source.
|
# CMake source.
|
||||||
|
|
||||||
# Remove leading /
|
# Remove leading /
|
||||||
@@ -1173,7 +1056,7 @@ endfunction()
|
|||||||
# a .cpp or .ptx file.
|
# a .cpp or .ptx file.
|
||||||
# INPUT:
|
# INPUT:
|
||||||
# cuda_target - Target name
|
# cuda_target - Target name
|
||||||
# format - PTX or OBJ
|
# format - PTX, CUBIN, FATBIN or OBJ
|
||||||
# FILE1 .. FILEN - The remaining arguments are the sources to be wrapped.
|
# FILE1 .. FILEN - The remaining arguments are the sources to be wrapped.
|
||||||
# OPTIONS - Extra options to NVCC
|
# OPTIONS - Extra options to NVCC
|
||||||
# OUTPUT:
|
# OUTPUT:
|
||||||
@@ -1219,8 +1102,14 @@ macro(CUDA_WRAP_SRCS cuda_target format generated_files)
|
|||||||
set(nvcc_flags ${nvcc_flags} -m32)
|
set(nvcc_flags ${nvcc_flags} -m32)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(CUDA_TARGET_CPU_ARCH)
|
if(CUDA_TARGET_CPU_ARCH AND CUDA_VERSION VERSION_LESS "7.0")
|
||||||
set(nvcc_flags ${nvcc_flags} "--target-cpu-architecture=${CUDA_TARGET_CPU_ARCH}")
|
# CPU architecture is either ARM or X86. Patch AARCH64 to be ARM
|
||||||
|
string(REPLACE "AARCH64" "ARM" CUDA_TARGET_CPU_ARCH_patched ${CUDA_TARGET_CPU_ARCH})
|
||||||
|
set(nvcc_flags ${nvcc_flags} "--target-cpu-architecture=${CUDA_TARGET_CPU_ARCH_patched}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(CUDA_TARGET_OS_VARIANT AND CUDA_VERSION VERSION_LESS "7.0")
|
||||||
|
set(nvcc_flags ${nvcc_flags} "-target-os-variant=${CUDA_TARGET_OS_VARIANT}")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# This needs to be passed in at this stage, because VS needs to fill out the
|
# This needs to be passed in at this stage, because VS needs to fill out the
|
||||||
@@ -1351,7 +1240,7 @@ macro(CUDA_WRAP_SRCS cuda_target format generated_files)
|
|||||||
foreach(file ${ARGN})
|
foreach(file ${ARGN})
|
||||||
# Ignore any file marked as a HEADER_FILE_ONLY
|
# Ignore any file marked as a HEADER_FILE_ONLY
|
||||||
get_source_file_property(_is_header ${file} HEADER_FILE_ONLY)
|
get_source_file_property(_is_header ${file} HEADER_FILE_ONLY)
|
||||||
if(${file} MATCHES ".*\\.cu$" AND NOT _is_header)
|
if(${file} MATCHES "\\.cu$" AND NOT _is_header)
|
||||||
|
|
||||||
# Allow per source file overrides of the format.
|
# Allow per source file overrides of the format.
|
||||||
get_source_file_property(_cuda_source_format ${file} CUDA_SOURCE_PROPERTY_FORMAT)
|
get_source_file_property(_cuda_source_format ${file} CUDA_SOURCE_PROPERTY_FORMAT)
|
||||||
@@ -1359,16 +1248,22 @@ macro(CUDA_WRAP_SRCS cuda_target format generated_files)
|
|||||||
set(_cuda_source_format ${format})
|
set(_cuda_source_format ${format})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if( ${_cuda_source_format} MATCHES "PTX" )
|
if( ${_cuda_source_format} MATCHES "OBJ")
|
||||||
set( compile_to_ptx ON )
|
set( cuda_compile_to_external_module OFF )
|
||||||
elseif( ${_cuda_source_format} MATCHES "OBJ")
|
|
||||||
set( compile_to_ptx OFF )
|
|
||||||
else()
|
else()
|
||||||
message( FATAL_ERROR "Invalid format flag passed to CUDA_WRAP_SRCS for file '${file}': '${_cuda_source_format}'. Use OBJ or PTX.")
|
set( cuda_compile_to_external_module ON )
|
||||||
|
if( ${_cuda_source_format} MATCHES "PTX" )
|
||||||
|
set( cuda_compile_to_external_module_type "ptx" )
|
||||||
|
elseif( ${_cuda_source_format} MATCHES "CUBIN")
|
||||||
|
set( cuda_compile_to_external_module_type "cubin" )
|
||||||
|
elseif( ${_cuda_source_format} MATCHES "FATBIN")
|
||||||
|
set( cuda_compile_to_external_module_type "fatbin" )
|
||||||
|
else()
|
||||||
|
message( FATAL_ERROR "Invalid format flag passed to CUDA_WRAP_SRCS for file '${file}': '${_cuda_source_format}'. Use OBJ, PTX, CUBIN or FATBIN.")
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(cuda_compile_to_external_module)
|
||||||
if(compile_to_ptx)
|
|
||||||
# Don't use any of the host compilation flags for PTX targets.
|
# Don't use any of the host compilation flags for PTX targets.
|
||||||
set(CUDA_HOST_FLAGS)
|
set(CUDA_HOST_FLAGS)
|
||||||
set(CUDA_NVCC_FLAGS_CONFIG)
|
set(CUDA_NVCC_FLAGS_CONFIG)
|
||||||
@@ -1383,7 +1278,7 @@ macro(CUDA_WRAP_SRCS cuda_target format generated_files)
|
|||||||
if(CUDA_GENERATED_OUTPUT_DIR)
|
if(CUDA_GENERATED_OUTPUT_DIR)
|
||||||
set(cuda_compile_output_dir "${CUDA_GENERATED_OUTPUT_DIR}")
|
set(cuda_compile_output_dir "${CUDA_GENERATED_OUTPUT_DIR}")
|
||||||
else()
|
else()
|
||||||
if ( compile_to_ptx )
|
if ( cuda_compile_to_external_module )
|
||||||
set(cuda_compile_output_dir "${CMAKE_CURRENT_BINARY_DIR}")
|
set(cuda_compile_output_dir "${CMAKE_CURRENT_BINARY_DIR}")
|
||||||
else()
|
else()
|
||||||
set(cuda_compile_output_dir "${cuda_compile_intermediate_directory}")
|
set(cuda_compile_output_dir "${cuda_compile_intermediate_directory}")
|
||||||
@@ -1393,10 +1288,10 @@ macro(CUDA_WRAP_SRCS cuda_target format generated_files)
|
|||||||
# Add a custom target to generate a c or ptx file. ######################
|
# Add a custom target to generate a c or ptx file. ######################
|
||||||
|
|
||||||
get_filename_component( basename ${file} NAME )
|
get_filename_component( basename ${file} NAME )
|
||||||
if( compile_to_ptx )
|
if( cuda_compile_to_external_module )
|
||||||
set(generated_file_path "${cuda_compile_output_dir}")
|
set(generated_file_path "${cuda_compile_output_dir}")
|
||||||
set(generated_file_basename "${cuda_target}_generated_${basename}.ptx")
|
set(generated_file_basename "${cuda_target}_generated_${basename}.${cuda_compile_to_external_module_type}")
|
||||||
set(format_flag "-ptx")
|
set(format_flag "-${cuda_compile_to_external_module_type}")
|
||||||
file(MAKE_DIRECTORY "${cuda_compile_output_dir}")
|
file(MAKE_DIRECTORY "${cuda_compile_output_dir}")
|
||||||
else()
|
else()
|
||||||
set(generated_file_path "${cuda_compile_output_dir}/${CMAKE_CFG_INTDIR}")
|
set(generated_file_path "${cuda_compile_output_dir}/${CMAKE_CFG_INTDIR}")
|
||||||
@@ -1419,7 +1314,7 @@ macro(CUDA_WRAP_SRCS cuda_target format generated_files)
|
|||||||
set(custom_target_script "${cuda_compile_intermediate_directory}/${generated_file_basename}.cmake")
|
set(custom_target_script "${cuda_compile_intermediate_directory}/${generated_file_basename}.cmake")
|
||||||
|
|
||||||
# Setup properties for obj files:
|
# Setup properties for obj files:
|
||||||
if( NOT compile_to_ptx )
|
if( NOT cuda_compile_to_external_module )
|
||||||
set_source_files_properties("${generated_file}"
|
set_source_files_properties("${generated_file}"
|
||||||
PROPERTIES
|
PROPERTIES
|
||||||
EXTERNAL_OBJECT true # This is an object file not to be compiled, but only be linked.
|
EXTERNAL_OBJECT true # This is an object file not to be compiled, but only be linked.
|
||||||
@@ -1434,7 +1329,7 @@ macro(CUDA_WRAP_SRCS cuda_target format generated_files)
|
|||||||
set(source_file "${CMAKE_CURRENT_SOURCE_DIR}/${file}")
|
set(source_file "${CMAKE_CURRENT_SOURCE_DIR}/${file}")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if( NOT compile_to_ptx AND CUDA_SEPARABLE_COMPILATION)
|
if( NOT cuda_compile_to_external_module AND CUDA_SEPARABLE_COMPILATION)
|
||||||
list(APPEND ${cuda_target}_SEPARABLE_COMPILATION_OBJECTS "${generated_file}")
|
list(APPEND ${cuda_target}_SEPARABLE_COMPILATION_OBJECTS "${generated_file}")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
@@ -1451,7 +1346,7 @@ macro(CUDA_WRAP_SRCS cuda_target format generated_files)
|
|||||||
# Build the NVCC made dependency file ###################################
|
# Build the NVCC made dependency file ###################################
|
||||||
set(build_cubin OFF)
|
set(build_cubin OFF)
|
||||||
if ( NOT CUDA_BUILD_EMULATION AND CUDA_BUILD_CUBIN )
|
if ( NOT CUDA_BUILD_EMULATION AND CUDA_BUILD_CUBIN )
|
||||||
if ( NOT compile_to_ptx )
|
if ( NOT cuda_compile_to_external_module )
|
||||||
set ( build_cubin ON )
|
set ( build_cubin ON )
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
@@ -1478,8 +1373,8 @@ macro(CUDA_WRAP_SRCS cuda_target format generated_files)
|
|||||||
|
|
||||||
# Create up the comment string
|
# Create up the comment string
|
||||||
file(RELATIVE_PATH generated_file_relative_path "${CMAKE_BINARY_DIR}" "${generated_file}")
|
file(RELATIVE_PATH generated_file_relative_path "${CMAKE_BINARY_DIR}" "${generated_file}")
|
||||||
if(compile_to_ptx)
|
if(cuda_compile_to_external_module)
|
||||||
set(cuda_build_comment_string "Building NVCC ptx file ${generated_file_relative_path}")
|
set(cuda_build_comment_string "Building NVCC ${cuda_compile_to_external_module_type} file ${generated_file_relative_path}")
|
||||||
else()
|
else()
|
||||||
set(cuda_build_comment_string "Building NVCC (${cuda_build_type}) object ${generated_file_relative_path}")
|
set(cuda_build_comment_string "Building NVCC (${cuda_build_type}) object ${generated_file_relative_path}")
|
||||||
endif()
|
endif()
|
||||||
@@ -1572,18 +1467,27 @@ function(CUDA_LINK_SEPARABLE_COMPILATION_OBJECTS output_file cuda_target options
|
|||||||
# If -ccbin, --compiler-bindir has been specified, don't do anything. Otherwise add it here.
|
# If -ccbin, --compiler-bindir has been specified, don't do anything. Otherwise add it here.
|
||||||
list( FIND nvcc_flags "-ccbin" ccbin_found0 )
|
list( FIND nvcc_flags "-ccbin" ccbin_found0 )
|
||||||
list( FIND nvcc_flags "--compiler-bindir" ccbin_found1 )
|
list( FIND nvcc_flags "--compiler-bindir" ccbin_found1 )
|
||||||
if( ccbin_found0 LESS 0 AND ccbin_found1 LESS 0 )
|
if( ccbin_found0 LESS 0 AND ccbin_found1 LESS 0 AND CUDA_HOST_COMPILER )
|
||||||
list(APPEND nvcc_flags -ccbin "\"${CUDA_HOST_COMPILER}\"")
|
list(APPEND nvcc_flags -ccbin "\"${CUDA_HOST_COMPILER}\"")
|
||||||
endif()
|
endif()
|
||||||
|
# Create a list of flags specified by CUDA_NVCC_FLAGS_${CONFIG}
|
||||||
|
set(config_specific_flags)
|
||||||
set(flags)
|
set(flags)
|
||||||
foreach(config ${CUDA_configuration_types})
|
foreach(config ${CUDA_configuration_types})
|
||||||
string(TOUPPER ${config} config_upper)
|
string(TOUPPER ${config} config_upper)
|
||||||
|
# Add config specific flags
|
||||||
|
foreach(f ${CUDA_NVCC_FLAGS_${config_upper}})
|
||||||
|
list(APPEND config_specific_flags $<$<CONFIG:${config}>:${f}>)
|
||||||
|
endforeach()
|
||||||
set(important_host_flags)
|
set(important_host_flags)
|
||||||
_cuda_get_important_host_flags(important_host_flags ${CMAKE_${CUDA_C_OR_CXX}_FLAGS_${config_upper}})
|
_cuda_get_important_host_flags(important_host_flags ${CMAKE_${CUDA_C_OR_CXX}_FLAGS_${config_upper}})
|
||||||
foreach(f ${important_host_flags})
|
foreach(f ${important_host_flags})
|
||||||
list(APPEND flags $<$<CONFIG:${config}>:-Xcompiler> $<$<CONFIG:${config}>:${f}>)
|
list(APPEND flags $<$<CONFIG:${config}>:-Xcompiler> $<$<CONFIG:${config}>:${f}>)
|
||||||
endforeach()
|
endforeach()
|
||||||
endforeach()
|
endforeach()
|
||||||
|
# Add our general CUDA_NVCC_FLAGS with the configuration specifig flags
|
||||||
|
set(nvcc_flags ${CUDA_NVCC_FLAGS} ${config_specific_flags} ${nvcc_flags})
|
||||||
|
|
||||||
file(RELATIVE_PATH output_file_relative_path "${CMAKE_BINARY_DIR}" "${output_file}")
|
file(RELATIVE_PATH output_file_relative_path "${CMAKE_BINARY_DIR}" "${output_file}")
|
||||||
|
|
||||||
# Some generators don't handle the multiple levels of custom command
|
# Some generators don't handle the multiple levels of custom command
|
||||||
@@ -1709,21 +1613,29 @@ endmacro()
|
|||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
###############################################################################
|
###############################################################################
|
||||||
# CUDA COMPILE
|
# (Internal) helper for manually added cuda source files with specific targets
|
||||||
###############################################################################
|
###############################################################################
|
||||||
###############################################################################
|
###############################################################################
|
||||||
macro(CUDA_COMPILE generated_files)
|
macro(cuda_compile_base cuda_target format generated_files)
|
||||||
|
|
||||||
# Separate the sources from the options
|
# Separate the sources from the options
|
||||||
CUDA_GET_SOURCES_AND_OPTIONS(_sources _cmake_options _options ${ARGN})
|
CUDA_GET_SOURCES_AND_OPTIONS(_sources _cmake_options _options ${ARGN})
|
||||||
# Create custom commands and targets for each file.
|
# Create custom commands and targets for each file.
|
||||||
CUDA_WRAP_SRCS( cuda_compile OBJ _generated_files ${_sources} ${_cmake_options}
|
CUDA_WRAP_SRCS( ${cuda_target} ${format} _generated_files ${_sources} ${_cmake_options}
|
||||||
OPTIONS ${_options} )
|
OPTIONS ${_options} )
|
||||||
|
|
||||||
set( ${generated_files} ${_generated_files})
|
set( ${generated_files} ${_generated_files})
|
||||||
|
|
||||||
endmacro()
|
endmacro()
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
###############################################################################
|
||||||
|
# CUDA COMPILE
|
||||||
|
###############################################################################
|
||||||
|
###############################################################################
|
||||||
|
macro(CUDA_COMPILE generated_files)
|
||||||
|
cuda_compile_base(cuda_compile OBJ ${generated_files} ${ARGN})
|
||||||
|
endmacro()
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
###############################################################################
|
###############################################################################
|
||||||
@@ -1731,17 +1643,28 @@ endmacro()
|
|||||||
###############################################################################
|
###############################################################################
|
||||||
###############################################################################
|
###############################################################################
|
||||||
macro(CUDA_COMPILE_PTX generated_files)
|
macro(CUDA_COMPILE_PTX generated_files)
|
||||||
|
cuda_compile_base(cuda_compile_ptx PTX ${generated_files} ${ARGN})
|
||||||
# Separate the sources from the options
|
|
||||||
CUDA_GET_SOURCES_AND_OPTIONS(_sources _cmake_options _options ${ARGN})
|
|
||||||
# Create custom commands and targets for each file.
|
|
||||||
CUDA_WRAP_SRCS( cuda_compile_ptx PTX _generated_files ${_sources} ${_cmake_options}
|
|
||||||
OPTIONS ${_options} )
|
|
||||||
|
|
||||||
set( ${generated_files} ${_generated_files})
|
|
||||||
|
|
||||||
endmacro()
|
endmacro()
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
###############################################################################
|
||||||
|
# CUDA COMPILE FATBIN
|
||||||
|
###############################################################################
|
||||||
|
###############################################################################
|
||||||
|
macro(CUDA_COMPILE_FATBIN generated_files)
|
||||||
|
cuda_compile_base(cuda_compile_fatbin FATBIN ${generated_files} ${ARGN})
|
||||||
|
endmacro()
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
###############################################################################
|
||||||
|
# CUDA COMPILE CUBIN
|
||||||
|
###############################################################################
|
||||||
|
###############################################################################
|
||||||
|
macro(CUDA_COMPILE_CUBIN generated_files)
|
||||||
|
cuda_compile_base(cuda_compile_cubin CUBIN ${generated_files} ${ARGN})
|
||||||
|
endmacro()
|
||||||
|
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
###############################################################################
|
###############################################################################
|
||||||
# CUDA ADD CUFFT TO TARGET
|
# CUDA ADD CUFFT TO TARGET
|
||||||
|
|||||||
@@ -37,12 +37,11 @@
|
|||||||
|
|
||||||
file(READ ${input_file} depend_text)
|
file(READ ${input_file} depend_text)
|
||||||
|
|
||||||
if (${depend_text} MATCHES ".+")
|
if (NOT "${depend_text}" STREQUAL "")
|
||||||
|
|
||||||
# message("FOUND DEPENDS")
|
# message("FOUND DEPENDS")
|
||||||
|
|
||||||
# Remember, four backslashes is escaped to one backslash in the string.
|
string(REPLACE "\\ " " " depend_text ${depend_text})
|
||||||
string(REGEX REPLACE "\\\\ " " " depend_text ${depend_text})
|
|
||||||
|
|
||||||
# This works for the nvcc -M generated dependency files.
|
# This works for the nvcc -M generated dependency files.
|
||||||
string(REGEX REPLACE "^.* : " "" depend_text ${depend_text})
|
string(REGEX REPLACE "^.* : " "" depend_text ${depend_text})
|
||||||
|
|||||||
@@ -37,11 +37,10 @@
|
|||||||
|
|
||||||
file(READ ${input_file} file_text)
|
file(READ ${input_file} file_text)
|
||||||
|
|
||||||
if (${file_text} MATCHES ".+")
|
if (NOT "${file_text}" STREQUAL "")
|
||||||
|
|
||||||
# Remember, four backslashes is escaped to one backslash in the string.
|
string(REPLACE ";" "\\;" file_text ${file_text})
|
||||||
string(REGEX REPLACE ";" "\\\\;" file_text ${file_text})
|
string(REPLACE "\ncode" ";code" file_text ${file_text})
|
||||||
string(REGEX REPLACE "\ncode" ";code" file_text ${file_text})
|
|
||||||
|
|
||||||
list(LENGTH file_text len)
|
list(LENGTH file_text len)
|
||||||
|
|
||||||
@@ -57,7 +56,7 @@ if (${file_text} MATCHES ".+")
|
|||||||
|
|
||||||
# Extract kernel names.
|
# Extract kernel names.
|
||||||
if (${entry} MATCHES "[^g]name = ([^ ]+)")
|
if (${entry} MATCHES "[^g]name = ([^ ]+)")
|
||||||
string(REGEX REPLACE ".* = ([^ ]+)" "\\1" entry ${entry})
|
set(entry "${CMAKE_MATCH_1}")
|
||||||
|
|
||||||
# Check to see if the kernel name starts with "_"
|
# Check to see if the kernel name starts with "_"
|
||||||
set(skip FALSE)
|
set(skip FALSE)
|
||||||
@@ -76,19 +75,19 @@ if (${file_text} MATCHES ".+")
|
|||||||
|
|
||||||
# Registers
|
# Registers
|
||||||
if (${entry} MATCHES "reg([ ]+)=([ ]+)([^ ]+)")
|
if (${entry} MATCHES "reg([ ]+)=([ ]+)([^ ]+)")
|
||||||
string(REGEX REPLACE ".*([ ]+)=([ ]+)([^ ]+)" "\\3" entry ${entry})
|
set(entry "${CMAKE_MATCH_3}")
|
||||||
message("Registers: ${entry}")
|
message("Registers: ${entry}")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Local memory
|
# Local memory
|
||||||
if (${entry} MATCHES "lmem([ ]+)=([ ]+)([^ ]+)")
|
if (${entry} MATCHES "lmem([ ]+)=([ ]+)([^ ]+)")
|
||||||
string(REGEX REPLACE ".*([ ]+)=([ ]+)([^ ]+)" "\\3" entry ${entry})
|
set(entry "${CMAKE_MATCH_3}")
|
||||||
message("Local: ${entry}")
|
message("Local: ${entry}")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Shared memory
|
# Shared memory
|
||||||
if (${entry} MATCHES "smem([ ]+)=([ ]+)([^ ]+)")
|
if (${entry} MATCHES "smem([ ]+)=([ ]+)([^ ]+)")
|
||||||
string(REGEX REPLACE ".*([ ]+)=([ ]+)([^ ]+)" "\\3" entry ${entry})
|
set(entry "${CMAKE_MATCH_3}")
|
||||||
message("Shared: ${entry}")
|
message("Shared: ${entry}")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ set(cmake_dependency_file "@cmake_dependency_file@") # path
|
|||||||
set(CUDA_make2cmake "@CUDA_make2cmake@") # path
|
set(CUDA_make2cmake "@CUDA_make2cmake@") # path
|
||||||
set(CUDA_parse_cubin "@CUDA_parse_cubin@") # path
|
set(CUDA_parse_cubin "@CUDA_parse_cubin@") # path
|
||||||
set(build_cubin @build_cubin@) # bool
|
set(build_cubin @build_cubin@) # bool
|
||||||
set(CUDA_HOST_COMPILER "@CUDA_HOST_COMPILER@") # bool
|
set(CUDA_HOST_COMPILER "@CUDA_HOST_COMPILER@") # path
|
||||||
# We won't actually use these variables for now, but we need to set this, in
|
# We won't actually use these variables for now, but we need to set this, in
|
||||||
# order to force this file to be run again if it changes.
|
# order to force this file to be run again if it changes.
|
||||||
set(generated_file_path "@generated_file_path@") # path
|
set(generated_file_path "@generated_file_path@") # path
|
||||||
@@ -106,7 +106,7 @@ list(APPEND CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS_${build_configuration}})
|
|||||||
# Any -ccbin existing in CUDA_NVCC_FLAGS gets highest priority
|
# Any -ccbin existing in CUDA_NVCC_FLAGS gets highest priority
|
||||||
list( FIND CUDA_NVCC_FLAGS "-ccbin" ccbin_found0 )
|
list( FIND CUDA_NVCC_FLAGS "-ccbin" ccbin_found0 )
|
||||||
list( FIND CUDA_NVCC_FLAGS "--compiler-bindir" ccbin_found1 )
|
list( FIND CUDA_NVCC_FLAGS "--compiler-bindir" ccbin_found1 )
|
||||||
if( ccbin_found0 LESS 0 AND ccbin_found1 LESS 0 )
|
if( ccbin_found0 LESS 0 AND ccbin_found1 LESS 0 AND CUDA_HOST_COMPILER )
|
||||||
if (CUDA_HOST_COMPILER STREQUAL "$(VCInstallDir)bin" AND DEFINED CCBIN)
|
if (CUDA_HOST_COMPILER STREQUAL "$(VCInstallDir)bin" AND DEFINED CCBIN)
|
||||||
set(CCBIN -ccbin "${CCBIN}")
|
set(CCBIN -ccbin "${CCBIN}")
|
||||||
else()
|
else()
|
||||||
@@ -126,7 +126,7 @@ endif()
|
|||||||
# and other return variables are present after executing the process.
|
# and other return variables are present after executing the process.
|
||||||
macro(cuda_execute_process status command)
|
macro(cuda_execute_process status command)
|
||||||
set(_command ${command})
|
set(_command ${command})
|
||||||
if(NOT _command STREQUAL "COMMAND")
|
if(NOT "x${_command}" STREQUAL "xCOMMAND")
|
||||||
message(FATAL_ERROR "Malformed call to cuda_execute_process. Missing COMMAND as second argument. (command = ${command})")
|
message(FATAL_ERROR "Malformed call to cuda_execute_process. Missing COMMAND as second argument. (command = ${command})")
|
||||||
endif()
|
endif()
|
||||||
if(verbose)
|
if(verbose)
|
||||||
|
|||||||
@@ -6,35 +6,67 @@ endif()
|
|||||||
|
|
||||||
set(HAVE_WINRT FALSE)
|
set(HAVE_WINRT FALSE)
|
||||||
|
|
||||||
# search Windows Platform SDK
|
# search Windows (Phone) Platform SDK
|
||||||
message(STATUS "Checking for Windows Platform SDK")
|
message(STATUS "Checking for Windows (Phone) Platform SDK 8.0/8.1")
|
||||||
GET_FILENAME_COMPONENT(WINDOWS_SDK_PATH "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows\\v8.0;InstallationFolder]" ABSOLUTE CACHE)
|
unset(WINDOWS_SDK_PATH CACHE)
|
||||||
if (WINDOWS_SDK_PATH STREQUAL "")
|
GET_FILENAME_COMPONENT(WINDOWS_SDK_PATH "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Microsoft SDKs\\WindowsPhoneApp\\v8.1;InstallationFolder]" ABSOLUTE CACHE)
|
||||||
set(HAVE_MSPDK FALSE)
|
if((NOT ENABLE_WINPHONESDK81) OR (NOT (MSVC_VERSION EQUAL 1800)) OR (WINDOWS_SDK_PATH STREQUAL ""))
|
||||||
message(STATUS "Windows Platform SDK 8.0 was not found")
|
unset(WINDOWS_SDK_PATH CACHE)
|
||||||
|
GET_FILENAME_COMPONENT(WINDOWS_SDK_PATH "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Microsoft SDKs\\WindowsPhone\\v8.0;InstallationFolder]" ABSOLUTE CACHE)
|
||||||
|
if((NOT ENABLE_WINPHONESDK80) OR (MSVC_VERSION LESS 1700) OR (WINDOWS_SDK_PATH STREQUAL ""))
|
||||||
|
unset(WINDOWS_SDK_PATH CACHE)
|
||||||
|
GET_FILENAME_COMPONENT(WINDOWS_SDK_PATH "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows\\v8.1;InstallationFolder]" ABSOLUTE CACHE)
|
||||||
|
if((NOT ENABLE_WINSDK81) OR (NOT (MSVC_VERSION EQUAL 1800)) OR (WINDOWS_SDK_PATH STREQUAL ""))
|
||||||
|
set(HAVE_MSPDK FALSE)
|
||||||
|
unset(WINDOWS_SDK_PATH CACHE)
|
||||||
|
GET_FILENAME_COMPONENT(WINDOWS_SDK_PATH "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows\\v8.0;InstallationFolder]" ABSOLUTE CACHE)
|
||||||
|
if(WINDOWS_SDK_PATH STREQUAL "")
|
||||||
|
set(HAVE_MSPDK FALSE)
|
||||||
|
message(STATUS "Windows (Phone) Platform SDK 8.0/8.1 was not found")
|
||||||
|
else()
|
||||||
|
set(HAVE_MSPDK TRUE)
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
set(HAVE_MSPDK TRUE)
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
set(HAVE_MSPDK TRUE)
|
||||||
|
endif()
|
||||||
else()
|
else()
|
||||||
set(HAVE_MSPDK TRUE)
|
set(HAVE_MSPDK TRUE)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
#search for Visual Studio 11.0 install directory
|
#search for Visual Studio 11.0/12.0 install directory
|
||||||
message(STATUS "Checking for Visual Studio 2012")
|
message(STATUS "Checking for Visual Studio 2012/2013")
|
||||||
GET_FILENAME_COMPONENT(VISUAL_STUDIO_PATH [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\11.0\\Setup\\VS;ProductDir] REALPATH CACHE)
|
unset(VISUAL_STUDIO_PATH CACHE)
|
||||||
if (VISUAL_STUDIO_PATH STREQUAL "")
|
GET_FILENAME_COMPONENT(VISUAL_STUDIO_PATH [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\12.0\\Setup\\VS;ProductDir] REALPATH CACHE)
|
||||||
set(HAVE_MSVC2012 FALSE)
|
if((NOT ENABLE_LIBVS2013) OR (NOT (MSVC_VERSION EQUAL 1800)) OR (VISUAL_STUDIO_PATH STREQUAL ""))
|
||||||
message(STATUS "Visual Studio 2012 was not found")
|
set(HAVE_MSVC2013 FALSE)
|
||||||
|
unset(VISUAL_STUDIO_PATH CACHE)
|
||||||
|
GET_FILENAME_COMPONENT(VISUAL_STUDIO_PATH [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\11.0\\Setup\\VS;ProductDir] REALPATH CACHE)
|
||||||
|
if(VISUAL_STUDIO_PATH STREQUAL "")
|
||||||
|
set(HAVE_MSVC2012 FALSE)
|
||||||
|
message(STATUS "Visual Studio 2012/2013 not found")
|
||||||
|
else()
|
||||||
|
set(HAVE_MSVC2012 TRUE)
|
||||||
|
endif()
|
||||||
else()
|
else()
|
||||||
set(HAVE_MSVC2012 TRUE)
|
set(HAVE_MSVC2013 TRUE)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
try_compile(HAVE_WINRT_SDK
|
try_compile(HAVE_WINRT_SDK
|
||||||
"${OpenCV_BINARY_DIR}"
|
"${OpenCV_BINARY_DIR}"
|
||||||
"${OpenCV_SOURCE_DIR}/cmake/checks/winrttest.cpp")
|
"${OpenCV_SOURCE_DIR}/cmake/checks/winrttest.cpp")
|
||||||
|
|
||||||
if (ENABLE_WINRT_MODE AND HAVE_WINRT_SDK AND HAVE_MSVC2012 AND HAVE_MSPDK)
|
if(ENABLE_WINRT_MODE AND HAVE_WINRT_SDK AND (HAVE_MSVC2012 OR HAVE_MSVC2013) AND HAVE_MSPDK)
|
||||||
set(HAVE_WINRT TRUE)
|
set(HAVE_WINRT TRUE)
|
||||||
|
set(HAVE_WINRT_CX TRUE)
|
||||||
|
elseif(ENABLE_WINRT_MODE_NATIVE AND HAVE_WINRT_SDK AND (HAVE_MSVC2012 OR HAVE_MSVC2013) AND HAVE_MSPDK)
|
||||||
|
set(HAVE_WINRT TRUE)
|
||||||
|
set(HAVE_WINRT_CX FALSE)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (HAVE_WINRT)
|
if(HAVE_WINRT)
|
||||||
add_definitions(/DWINVER=0x0602 /DNTDDI_VERSION=NTDDI_WIN8 /D_WIN32_WINNT=0x0602)
|
add_definitions(/DWINVER=0x0602 /DNTDDI_VERSION=NTDDI_WIN8 /D_WIN32_WINNT=0x0602)
|
||||||
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /appcontainer")
|
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /appcontainer")
|
||||||
set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} /appcontainer")
|
set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} /appcontainer")
|
||||||
|
|||||||
@@ -63,6 +63,10 @@ if(OPENCV_CAN_BREAK_BINARY_COMPATIBILITY)
|
|||||||
add_definitions(-DOPENCV_CAN_BREAK_BINARY_COMPATIBILITY)
|
add_definitions(-DOPENCV_CAN_BREAK_BINARY_COMPATIBILITY)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(BUILD_TINY_GPU_MODULE)
|
||||||
|
add_definitions(-DOPENCV_TINY_GPU_MODULE)
|
||||||
|
endif()
|
||||||
|
|
||||||
if(CMAKE_COMPILER_IS_GNUCXX)
|
if(CMAKE_COMPILER_IS_GNUCXX)
|
||||||
# High level of warnings.
|
# High level of warnings.
|
||||||
add_extra_compiler_option(-W)
|
add_extra_compiler_option(-W)
|
||||||
@@ -91,6 +95,8 @@ if(CMAKE_COMPILER_IS_GNUCXX)
|
|||||||
add_extra_compiler_option(-Wno-narrowing)
|
add_extra_compiler_option(-Wno-narrowing)
|
||||||
add_extra_compiler_option(-Wno-delete-non-virtual-dtor)
|
add_extra_compiler_option(-Wno-delete-non-virtual-dtor)
|
||||||
add_extra_compiler_option(-Wno-unnamed-type-template-args)
|
add_extra_compiler_option(-Wno-unnamed-type-template-args)
|
||||||
|
add_extra_compiler_option(-Wno-array-bounds)
|
||||||
|
add_extra_compiler_option(-Wno-aggressive-loop-optimizations)
|
||||||
endif()
|
endif()
|
||||||
add_extra_compiler_option(-fdiagnostics-show-option)
|
add_extra_compiler_option(-fdiagnostics-show-option)
|
||||||
|
|
||||||
@@ -112,6 +118,10 @@ if(CMAKE_COMPILER_IS_GNUCXX)
|
|||||||
add_extra_compiler_option(-march=i686)
|
add_extra_compiler_option(-march=i686)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(APPLE)
|
||||||
|
add_extra_compiler_option(-Wno-semicolon-before-method-body)
|
||||||
|
endif()
|
||||||
|
|
||||||
# Other optimizations
|
# Other optimizations
|
||||||
if(ENABLE_OMIT_FRAME_POINTER)
|
if(ENABLE_OMIT_FRAME_POINTER)
|
||||||
add_extra_compiler_option(-fomit-frame-pointer)
|
add_extra_compiler_option(-fomit-frame-pointer)
|
||||||
@@ -130,11 +140,21 @@ if(CMAKE_COMPILER_IS_GNUCXX)
|
|||||||
if(ENABLE_SSE2)
|
if(ENABLE_SSE2)
|
||||||
add_extra_compiler_option(-msse2)
|
add_extra_compiler_option(-msse2)
|
||||||
endif()
|
endif()
|
||||||
|
if (ENABLE_NEON)
|
||||||
|
add_extra_compiler_option("-mfpu=neon")
|
||||||
|
endif()
|
||||||
|
if (ENABLE_VFPV3 AND NOT ENABLE_NEON)
|
||||||
|
add_extra_compiler_option("-mfpu=vfpv3")
|
||||||
|
endif()
|
||||||
|
|
||||||
# SSE3 and further should be disabled under MingW because it generates compiler errors
|
# SSE3 and further should be disabled under MingW because it generates compiler errors
|
||||||
if(NOT MINGW)
|
if(NOT MINGW)
|
||||||
if(ENABLE_AVX)
|
if(ENABLE_AVX)
|
||||||
add_extra_compiler_option(-mavx)
|
add_extra_compiler_option("-mavx")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(ENABLE_AVX2)
|
||||||
|
add_extra_compiler_option("-mavx2")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# GCC depresses SSEx instructions when -mavx is used. Instead, it generates new AVX instructions or AVX equivalence for all SSEx instructions when needed.
|
# GCC depresses SSEx instructions when -mavx is used. Instead, it generates new AVX instructions or AVX equivalence for all SSEx instructions when needed.
|
||||||
@@ -181,11 +201,13 @@ if(CMAKE_COMPILER_IS_GNUCXX)
|
|||||||
add_extra_compiler_option(-ffunction-sections)
|
add_extra_compiler_option(-ffunction-sections)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(ENABLE_COVERAGE)
|
||||||
|
set(OPENCV_EXTRA_C_FLAGS "${OPENCV_EXTRA_C_FLAGS} --coverage")
|
||||||
|
set(OPENCV_EXTRA_CXX_FLAGS "${OPENCV_EXTRA_CXX_FLAGS} --coverage")
|
||||||
|
endif()
|
||||||
|
|
||||||
set(OPENCV_EXTRA_FLAGS_RELEASE "${OPENCV_EXTRA_FLAGS_RELEASE} -DNDEBUG")
|
set(OPENCV_EXTRA_FLAGS_RELEASE "${OPENCV_EXTRA_FLAGS_RELEASE} -DNDEBUG")
|
||||||
set(OPENCV_EXTRA_FLAGS_DEBUG "${OPENCV_EXTRA_FLAGS_DEBUG} -O0 -DDEBUG -D_DEBUG")
|
set(OPENCV_EXTRA_FLAGS_DEBUG "${OPENCV_EXTRA_FLAGS_DEBUG} -O0 -DDEBUG -D_DEBUG")
|
||||||
if(BUILD_WITH_DEBUG_INFO)
|
|
||||||
set(OPENCV_EXTRA_FLAGS_DEBUG "${OPENCV_EXTRA_FLAGS_DEBUG} -ggdb3")
|
|
||||||
endif()
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(MSVC)
|
if(MSVC)
|
||||||
@@ -208,10 +230,6 @@ if(MSVC)
|
|||||||
set(OPENCV_EXTRA_FLAGS_RELEASE "${OPENCV_EXTRA_FLAGS_RELEASE} /Zi")
|
set(OPENCV_EXTRA_FLAGS_RELEASE "${OPENCV_EXTRA_FLAGS_RELEASE} /Zi")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(ENABLE_AVX AND NOT MSVC_VERSION LESS 1600)
|
|
||||||
set(OPENCV_EXTRA_FLAGS "${OPENCV_EXTRA_FLAGS} /arch:AVX")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(ENABLE_SSE4_1 AND CV_ICC AND NOT OPENCV_EXTRA_FLAGS MATCHES "/arch:")
|
if(ENABLE_SSE4_1 AND CV_ICC AND NOT OPENCV_EXTRA_FLAGS MATCHES "/arch:")
|
||||||
set(OPENCV_EXTRA_FLAGS "${OPENCV_EXTRA_FLAGS} /arch:SSE4.1")
|
set(OPENCV_EXTRA_FLAGS "${OPENCV_EXTRA_FLAGS} /arch:SSE4.1")
|
||||||
endif()
|
endif()
|
||||||
@@ -230,7 +248,7 @@ if(MSVC)
|
|||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(ENABLE_SSE OR ENABLE_SSE2 OR ENABLE_SSE3 OR ENABLE_SSE4_1 OR ENABLE_AVX)
|
if(ENABLE_SSE OR ENABLE_SSE2 OR ENABLE_SSE3 OR ENABLE_SSE4_1 OR ENABLE_AVX OR ENABLE_AVX2)
|
||||||
set(OPENCV_EXTRA_FLAGS "${OPENCV_EXTRA_FLAGS} /Oi")
|
set(OPENCV_EXTRA_FLAGS "${OPENCV_EXTRA_FLAGS} /Oi")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
@@ -245,8 +263,13 @@ if(MSVC)
|
|||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(MSVC12 AND NOT CMAKE_GENERATOR MATCHES "Visual Studio")
|
||||||
|
set(OPENCV_EXTRA_C_FLAGS "${OPENCV_EXTRA_C_FLAGS} /FS")
|
||||||
|
set(OPENCV_EXTRA_CXX_FLAGS "${OPENCV_EXTRA_CXX_FLAGS} /FS")
|
||||||
|
endif()
|
||||||
|
|
||||||
# Extra link libs if the user selects building static libs:
|
# Extra link libs if the user selects building static libs:
|
||||||
if(NOT BUILD_SHARED_LIBS AND CMAKE_COMPILER_IS_GNUCXX AND NOT ANDROID)
|
if(NOT BUILD_SHARED_LIBS AND ((CMAKE_COMPILER_IS_GNUCXX AND NOT ANDROID) OR QNX))
|
||||||
# Android does not need these settings because they are already set by toolchain file
|
# Android does not need these settings because they are already set by toolchain file
|
||||||
set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} stdc++)
|
set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} stdc++)
|
||||||
set(OPENCV_EXTRA_FLAGS "-fPIC ${OPENCV_EXTRA_FLAGS}")
|
set(OPENCV_EXTRA_FLAGS "-fPIC ${OPENCV_EXTRA_FLAGS}")
|
||||||
|
|||||||
@@ -77,6 +77,10 @@ if(MSVC)
|
|||||||
set(OpenCV_RUNTIME vc10)
|
set(OpenCV_RUNTIME vc10)
|
||||||
elseif(MSVC_VERSION EQUAL 1700)
|
elseif(MSVC_VERSION EQUAL 1700)
|
||||||
set(OpenCV_RUNTIME vc11)
|
set(OpenCV_RUNTIME vc11)
|
||||||
|
elseif(MSVC_VERSION EQUAL 1800)
|
||||||
|
set(OpenCV_RUNTIME vc12)
|
||||||
|
elseif(MSVC_VERSION EQUAL 1900)
|
||||||
|
set(OpenCV_RUNTIME vc14)
|
||||||
endif()
|
endif()
|
||||||
elseif(MINGW)
|
elseif(MINGW)
|
||||||
set(OpenCV_RUNTIME mingw)
|
set(OpenCV_RUNTIME mingw)
|
||||||
@@ -84,7 +88,7 @@ elseif(MINGW)
|
|||||||
execute_process(COMMAND ${CMAKE_CXX_COMPILER} -dumpmachine
|
execute_process(COMMAND ${CMAKE_CXX_COMPILER} -dumpmachine
|
||||||
OUTPUT_VARIABLE OPENCV_GCC_TARGET_MACHINE
|
OUTPUT_VARIABLE OPENCV_GCC_TARGET_MACHINE
|
||||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||||
if(CMAKE_OPENCV_GCC_TARGET_MACHINE MATCHES "64")
|
if(OPENCV_GCC_TARGET_MACHINE MATCHES "amd64|x86_64|AMD64")
|
||||||
set(MINGW64 1)
|
set(MINGW64 1)
|
||||||
set(OpenCV_ARCH x64)
|
set(OpenCV_ARCH x64)
|
||||||
else()
|
else()
|
||||||
|
|||||||
@@ -180,7 +180,7 @@ unset(__android_project_chain CACHE)
|
|||||||
# add_android_project(target_name ${path} NATIVE_DEPS opencv_core LIBRARY_DEPS ${OpenCV_BINARY_DIR} SDK_TARGET 11)
|
# add_android_project(target_name ${path} NATIVE_DEPS opencv_core LIBRARY_DEPS ${OpenCV_BINARY_DIR} SDK_TARGET 11)
|
||||||
macro(add_android_project target path)
|
macro(add_android_project target path)
|
||||||
# parse arguments
|
# parse arguments
|
||||||
set(android_proj_arglist NATIVE_DEPS LIBRARY_DEPS SDK_TARGET IGNORE_JAVA IGNORE_MANIFEST)
|
set(android_proj_arglist NATIVE_DEPS LIBRARY_DEPS SDK_TARGET IGNORE_JAVA IGNORE_MANIFEST EMBED_CUDA FORCE_EMBED_OPENCV)
|
||||||
set(__varname "android_proj_")
|
set(__varname "android_proj_")
|
||||||
foreach(v ${android_proj_arglist})
|
foreach(v ${android_proj_arglist})
|
||||||
set(${__varname}${v} "")
|
set(${__varname}${v} "")
|
||||||
@@ -303,6 +303,46 @@ macro(add_android_project target path)
|
|||||||
add_custom_command(TARGET ${JNI_LIB_NAME} POST_BUILD COMMAND ${CMAKE_STRIP} --strip-unneeded "${android_proj_jni_location}")
|
add_custom_command(TARGET ${JNI_LIB_NAME} POST_BUILD COMMAND ${CMAKE_STRIP} --strip-unneeded "${android_proj_jni_location}")
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
# copy opencv_java, tbb if it is shared and dynamicuda if present if FORCE_EMBED_OPENCV flag is set
|
||||||
|
if(android_proj_FORCE_EMBED_OPENCV)
|
||||||
|
set(native_deps ${android_proj_NATIVE_DEPS})
|
||||||
|
# filter out gpu module as it is always static library on Android
|
||||||
|
list(REMOVE_ITEM native_deps "opencv_gpu")
|
||||||
|
if(ENABLE_DYNAMIC_CUDA)
|
||||||
|
list(APPEND native_deps "opencv_dynamicuda")
|
||||||
|
endif()
|
||||||
|
foreach(lib ${native_deps})
|
||||||
|
get_property(f TARGET ${lib} PROPERTY LOCATION)
|
||||||
|
get_filename_component(f_name ${f} NAME)
|
||||||
|
add_custom_command(
|
||||||
|
OUTPUT "${android_proj_bin_dir}/libs/${ANDROID_NDK_ABI_NAME}/${f_name}"
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E copy "${f}" "${android_proj_bin_dir}/libs/${ANDROID_NDK_ABI_NAME}/${f_name}"
|
||||||
|
DEPENDS "${lib}" VERBATIM
|
||||||
|
COMMENT "Embedding ${f}")
|
||||||
|
list(APPEND android_proj_file_deps "${android_proj_bin_dir}/libs/${ANDROID_NDK_ABI_NAME}/${f_name}")
|
||||||
|
endforeach()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# copy all needed CUDA libs to project if EMBED_CUDA flag is present
|
||||||
|
if(android_proj_EMBED_CUDA)
|
||||||
|
set(android_proj_culibs ${CUDA_npp_LIBRARY_ABS} ${CUDA_LIBRARIES_ABS})
|
||||||
|
if(HAVE_CUFFT)
|
||||||
|
list(INSERT android_proj_culibs 0 ${CUDA_cufft_LIBRARY_ABS})
|
||||||
|
endif()
|
||||||
|
if(HAVE_CUBLAS)
|
||||||
|
list(INSERT android_proj_culibs 0 ${CUDA_cublas_LIBRARY_ABS})
|
||||||
|
endif()
|
||||||
|
foreach(lib ${android_proj_culibs})
|
||||||
|
get_filename_component(f "${lib}" NAME)
|
||||||
|
add_custom_command(
|
||||||
|
OUTPUT "${android_proj_bin_dir}/libs/${ANDROID_NDK_ABI_NAME}/${f}"
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E copy "${lib}" "${android_proj_bin_dir}/libs/${ANDROID_NDK_ABI_NAME}/${f}"
|
||||||
|
DEPENDS "${lib}" VERBATIM
|
||||||
|
COMMENT "Embedding ${f}")
|
||||||
|
list(APPEND android_proj_file_deps "${android_proj_bin_dir}/libs/${ANDROID_NDK_ABI_NAME}/${f}")
|
||||||
|
endforeach()
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# build java part
|
# build java part
|
||||||
@@ -344,20 +384,20 @@ macro(add_android_project target path)
|
|||||||
add_custom_command(TARGET ${target} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy "${android_proj_bin_dir}/bin/${target}-debug.apk" "${OpenCV_BINARY_DIR}/bin/${target}.apk")
|
add_custom_command(TARGET ${target} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy "${android_proj_bin_dir}/bin/${target}-debug.apk" "${OpenCV_BINARY_DIR}/bin/${target}.apk")
|
||||||
if(INSTALL_ANDROID_EXAMPLES AND "${target}" MATCHES "^example-")
|
if(INSTALL_ANDROID_EXAMPLES AND "${target}" MATCHES "^example-")
|
||||||
#apk
|
#apk
|
||||||
install(FILES "${OpenCV_BINARY_DIR}/bin/${target}.apk" DESTINATION "samples" COMPONENT main)
|
install(FILES "${OpenCV_BINARY_DIR}/bin/${target}.apk" DESTINATION "samples" COMPONENT samples)
|
||||||
get_filename_component(sample_dir "${path}" NAME)
|
get_filename_component(sample_dir "${path}" NAME)
|
||||||
#java part
|
#java part
|
||||||
list(REMOVE_ITEM android_proj_files ${ANDROID_MANIFEST_FILE})
|
list(REMOVE_ITEM android_proj_files ${ANDROID_MANIFEST_FILE})
|
||||||
foreach(f ${android_proj_files} ${ANDROID_MANIFEST_FILE})
|
foreach(f ${android_proj_files} ${ANDROID_MANIFEST_FILE})
|
||||||
get_filename_component(install_subdir "${f}" PATH)
|
get_filename_component(install_subdir "${f}" PATH)
|
||||||
install(FILES "${android_proj_bin_dir}/${f}" DESTINATION "samples/${sample_dir}/${install_subdir}" COMPONENT main)
|
install(FILES "${android_proj_bin_dir}/${f}" DESTINATION "samples/${sample_dir}/${install_subdir}" COMPONENT samples)
|
||||||
endforeach()
|
endforeach()
|
||||||
#jni part + eclipse files
|
#jni part + eclipse files
|
||||||
file(GLOB_RECURSE jni_files RELATIVE "${path}" "${path}/jni/*" "${path}/.cproject")
|
file(GLOB_RECURSE jni_files RELATIVE "${path}" "${path}/jni/*" "${path}/.cproject")
|
||||||
ocv_list_filterout(jni_files "\\\\.svn")
|
ocv_list_filterout(jni_files "\\\\.svn")
|
||||||
foreach(f ${jni_files} ".classpath" ".project" ".settings/org.eclipse.jdt.core.prefs")
|
foreach(f ${jni_files} ".classpath" ".project" ".settings/org.eclipse.jdt.core.prefs")
|
||||||
get_filename_component(install_subdir "${f}" PATH)
|
get_filename_component(install_subdir "${f}" PATH)
|
||||||
install(FILES "${path}/${f}" DESTINATION "samples/${sample_dir}/${install_subdir}" COMPONENT main)
|
install(FILES "${path}/${f}" DESTINATION "samples/${sample_dir}/${install_subdir}" COMPONENT samples)
|
||||||
endforeach()
|
endforeach()
|
||||||
#update proj
|
#update proj
|
||||||
if(android_proj_lib_deps_commands)
|
if(android_proj_lib_deps_commands)
|
||||||
@@ -365,9 +405,9 @@ macro(add_android_project target path)
|
|||||||
endif()
|
endif()
|
||||||
install(CODE "EXECUTE_PROCESS(COMMAND ${ANDROID_EXECUTABLE} --silent update project --path . --target \"${android_proj_sdk_target}\" --name \"${target}\" ${inst_lib_opt}
|
install(CODE "EXECUTE_PROCESS(COMMAND ${ANDROID_EXECUTABLE} --silent update project --path . --target \"${android_proj_sdk_target}\" --name \"${target}\" ${inst_lib_opt}
|
||||||
WORKING_DIRECTORY \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/samples/${sample_dir}\"
|
WORKING_DIRECTORY \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/samples/${sample_dir}\"
|
||||||
)" COMPONENT main)
|
)" COMPONENT samples)
|
||||||
#empty 'gen'
|
#empty 'gen'
|
||||||
install(CODE "MAKE_DIRECTORY(\"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/samples/${sample_dir}/gen\")" COMPONENT main)
|
install(CODE "MAKE_DIRECTORY(\"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/samples/${sample_dir}/gen\")" COMPONENT samples)
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
endmacro()
|
endmacro()
|
||||||
|
|||||||
@@ -15,19 +15,10 @@ endif()
|
|||||||
|
|
||||||
set(CMAKE_MODULE_PATH "${OpenCV_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH})
|
set(CMAKE_MODULE_PATH "${OpenCV_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH})
|
||||||
|
|
||||||
foreach(var INCLUDE LIBRARY PROGRAM)
|
if(ANDROID AND "${CUDA_VERSION}" VERSION_LESS "7.0")
|
||||||
set(__old_frpm_${var} "${CMAKE_FIND_ROOT_PATH_MODE_${var}}")
|
set(CUDA_TARGET_OS_VARIANT "Android")
|
||||||
endforeach()
|
endif()
|
||||||
|
find_host_package(CUDA 4.2 QUIET)
|
||||||
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
|
|
||||||
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY BOTH)
|
|
||||||
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE NEVER)
|
|
||||||
|
|
||||||
find_package(CUDA 4.2 QUIET)
|
|
||||||
|
|
||||||
foreach(var INCLUDE LIBRARY PROGRAM)
|
|
||||||
set(CMAKE_FIND_ROOT_PATH_MODE_${var} "${__old_frpm_${var}}")
|
|
||||||
endforeach()
|
|
||||||
|
|
||||||
list(REMOVE_AT CMAKE_MODULE_PATH 0)
|
list(REMOVE_AT CMAKE_MODULE_PATH 0)
|
||||||
|
|
||||||
@@ -90,12 +81,24 @@ if(CUDA_FOUND)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(NOT DEFINED __cuda_arch_bin)
|
if(NOT DEFINED __cuda_arch_bin)
|
||||||
if(${CUDA_VERSION} VERSION_LESS "5.0")
|
if(ANDROID)
|
||||||
set(__cuda_arch_bin "1.1 1.2 1.3 2.0 2.1(2.0) 3.0")
|
if (ARM)
|
||||||
|
set(__cuda_arch_bin "3.2")
|
||||||
|
set(__cuda_arch_ptx "")
|
||||||
|
elseif(AARCH64)
|
||||||
|
set(__cuda_arch_bin "5.3")
|
||||||
|
set(__cuda_arch_ptx "")
|
||||||
|
endif()
|
||||||
else()
|
else()
|
||||||
set(__cuda_arch_bin "1.1 1.2 1.3 2.0 2.1(2.0) 3.0 3.5")
|
if(${CUDA_VERSION} VERSION_LESS "5.0")
|
||||||
|
set(__cuda_arch_bin "1.1 1.2 1.3 2.0 2.1(2.0) 3.0")
|
||||||
|
elseif(${CUDA_VERSION} VERSION_GREATER "6.5")
|
||||||
|
set(__cuda_arch_bin "2.0 2.1(2.0) 3.0 3.5")
|
||||||
|
else()
|
||||||
|
set(__cuda_arch_bin "1.1 1.2 1.3 2.0 2.1(2.0) 3.0 3.5")
|
||||||
|
endif()
|
||||||
|
set(__cuda_arch_ptx "3.0")
|
||||||
endif()
|
endif()
|
||||||
set(__cuda_arch_ptx "3.0")
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set(CUDA_ARCH_BIN ${__cuda_arch_bin} CACHE STRING "Specify 'real' GPU architectures to build binaries for, BIN(PTX) format is supported")
|
set(CUDA_ARCH_BIN ${__cuda_arch_bin} CACHE STRING "Specify 'real' GPU architectures to build binaries for, BIN(PTX) format is supported")
|
||||||
@@ -147,6 +150,10 @@ if(CUDA_FOUND)
|
|||||||
set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS} ${NVCC_FLAGS_EXTRA})
|
set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS} ${NVCC_FLAGS_EXTRA})
|
||||||
set(OpenCV_CUDA_CC "${NVCC_FLAGS_EXTRA}")
|
set(OpenCV_CUDA_CC "${NVCC_FLAGS_EXTRA}")
|
||||||
|
|
||||||
|
if(ANDROID)
|
||||||
|
set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS} "-Xptxas;-dlcm=ca")
|
||||||
|
endif()
|
||||||
|
|
||||||
message(STATUS "CUDA NVCC target flags: ${CUDA_NVCC_FLAGS}")
|
message(STATUS "CUDA NVCC target flags: ${CUDA_NVCC_FLAGS}")
|
||||||
|
|
||||||
OCV_OPTION(CUDA_FAST_MATH "Enable --use_fast_math for CUDA compiler " OFF)
|
OCV_OPTION(CUDA_FAST_MATH "Enable --use_fast_math for CUDA compiler " OFF)
|
||||||
@@ -169,6 +176,17 @@ if(CUDA_FOUND)
|
|||||||
|
|
||||||
# we remove -Wsign-promo as it generates warnings under linux
|
# we remove -Wsign-promo as it generates warnings under linux
|
||||||
string(REPLACE "-Wsign-promo" "" ${var} "${${var}}")
|
string(REPLACE "-Wsign-promo" "" ${var} "${${var}}")
|
||||||
|
|
||||||
|
# we remove -Wno-sign-promo as it generates warnings under linux
|
||||||
|
string(REPLACE "-Wno-sign-promo" "" ${var} "${${var}}")
|
||||||
|
|
||||||
|
# we remove -Wno-delete-non-virtual-dtor because it's used for C++ compiler
|
||||||
|
# but NVCC uses C compiler by default
|
||||||
|
string(REPLACE "-Wno-delete-non-virtual-dtor" "" ${var} "${${var}}")
|
||||||
|
|
||||||
|
# we remove -frtti because it's used for C++ compiler
|
||||||
|
# but NVCC uses C compiler by default
|
||||||
|
string(REPLACE "-frtti" "" ${var} "${${var}}")
|
||||||
endforeach()
|
endforeach()
|
||||||
|
|
||||||
if(BUILD_SHARED_LIBS)
|
if(BUILD_SHARED_LIBS)
|
||||||
@@ -198,3 +216,20 @@ else()
|
|||||||
unset(CUDA_ARCH_BIN CACHE)
|
unset(CUDA_ARCH_BIN CACHE)
|
||||||
unset(CUDA_ARCH_PTX CACHE)
|
unset(CUDA_ARCH_PTX CACHE)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(HAVE_CUDA)
|
||||||
|
set(CUDA_LIBRARIES_ABS ${CUDA_LIBRARIES})
|
||||||
|
ocv_create_imported_targets(CUDA_LIBRARIES ${CUDA_LIBRARIES})
|
||||||
|
set(CUDA_npp_LIBRARY_ABS ${CUDA_npp_LIBRARY})
|
||||||
|
ocv_create_imported_targets(CUDA_npp_LIBRARY ${CUDA_npp_LIBRARY})
|
||||||
|
|
||||||
|
if(HAVE_CUBLAS)
|
||||||
|
set(CUDA_cublas_LIBRARY_ABS ${CUDA_cublas_LIBRARY})
|
||||||
|
ocv_create_imported_targets(CUDA_cublas_LIBRARY ${CUDA_cublas_LIBRARY})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(HAVE_CUFFT)
|
||||||
|
set(CUDA_cufft_LIBRARY_ABS ${CUDA_cufft_LIBRARY})
|
||||||
|
ocv_create_imported_targets(CUDA_cufft_LIBRARY ${CUDA_cufft_LIBRARY})
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|||||||
@@ -91,9 +91,9 @@ elseif(CMAKE_COMPILER_IS_GNUCXX)
|
|||||||
|
|
||||||
if(WIN32)
|
if(WIN32)
|
||||||
execute_process(COMMAND ${CMAKE_CXX_COMPILER} -dumpmachine
|
execute_process(COMMAND ${CMAKE_CXX_COMPILER} -dumpmachine
|
||||||
OUTPUT_VARIABLE CMAKE_OPENCV_GCC_TARGET_MACHINE
|
OUTPUT_VARIABLE OPENCV_GCC_TARGET_MACHINE
|
||||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||||
if(CMAKE_OPENCV_GCC_TARGET_MACHINE MATCHES "amd64|x86_64|AMD64")
|
if(OPENCV_GCC_TARGET_MACHINE MATCHES "amd64|x86_64|AMD64")
|
||||||
set(MINGW64 1)
|
set(MINGW64 1)
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
@@ -109,10 +109,12 @@ elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "i686.*|i386.*|x86.*|amd64.*|AMD64.*")
|
|||||||
set(X86 1)
|
set(X86 1)
|
||||||
elseif (CMAKE_SYSTEM_PROCESSOR MATCHES "arm.*|ARM.*")
|
elseif (CMAKE_SYSTEM_PROCESSOR MATCHES "arm.*|ARM.*")
|
||||||
set(ARM 1)
|
set(ARM 1)
|
||||||
|
elseif (CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64.*|AARCH64.*")
|
||||||
|
set(AARCH64 1)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
|
||||||
# Similar code is existed in OpenCVConfig.cmake
|
# Similar code exists in OpenCVConfig.cmake
|
||||||
if(NOT DEFINED OpenCV_STATIC)
|
if(NOT DEFINED OpenCV_STATIC)
|
||||||
# look for global setting
|
# look for global setting
|
||||||
if(NOT DEFINED BUILD_SHARED_LIBS OR BUILD_SHARED_LIBS)
|
if(NOT DEFINED BUILD_SHARED_LIBS OR BUILD_SHARED_LIBS)
|
||||||
@@ -136,15 +138,15 @@ if(MSVC)
|
|||||||
set(OpenCV_RUNTIME vc10)
|
set(OpenCV_RUNTIME vc10)
|
||||||
elseif(MSVC_VERSION EQUAL 1700)
|
elseif(MSVC_VERSION EQUAL 1700)
|
||||||
set(OpenCV_RUNTIME vc11)
|
set(OpenCV_RUNTIME vc11)
|
||||||
|
elseif(MSVC_VERSION EQUAL 1800)
|
||||||
|
set(OpenCV_RUNTIME vc12)
|
||||||
|
elseif(MSVC_VERSION EQUAL 1900)
|
||||||
|
set(OpenCV_RUNTIME vc14)
|
||||||
endif()
|
endif()
|
||||||
elseif(MINGW)
|
elseif(MINGW)
|
||||||
set(OpenCV_RUNTIME mingw)
|
set(OpenCV_RUNTIME mingw)
|
||||||
|
|
||||||
execute_process(COMMAND ${CMAKE_CXX_COMPILER} -dumpmachine
|
if(MINGW64)
|
||||||
OUTPUT_VARIABLE OPENCV_GCC_TARGET_MACHINE
|
|
||||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
|
||||||
if(CMAKE_OPENCV_GCC_TARGET_MACHINE MATCHES "64")
|
|
||||||
set(MINGW64 1)
|
|
||||||
set(OpenCV_ARCH x64)
|
set(OpenCV_ARCH x64)
|
||||||
else()
|
else()
|
||||||
set(OpenCV_ARCH x86)
|
set(OpenCV_ARCH x86)
|
||||||
|
|||||||
@@ -38,10 +38,12 @@ if(PYTHON_EXECUTABLE)
|
|||||||
|
|
||||||
if(NOT ANDROID AND NOT IOS)
|
if(NOT ANDROID AND NOT IOS)
|
||||||
ocv_check_environment_variables(PYTHON_LIBRARY PYTHON_INCLUDE_DIR)
|
ocv_check_environment_variables(PYTHON_LIBRARY PYTHON_INCLUDE_DIR)
|
||||||
if(CMAKE_VERSION VERSION_GREATER 2.8.8 AND PYTHON_VERSION_FULL)
|
if(CMAKE_CROSSCOMPILING)
|
||||||
find_host_package(PythonLibs ${PYTHON_VERSION_FULL} EXACT)
|
find_package(PythonLibs ${PYTHON_VERSION_MAJOR_MINOR})
|
||||||
|
elseif(CMAKE_VERSION VERSION_GREATER 2.8.8 AND PYTHON_VERSION_FULL)
|
||||||
|
find_package(PythonLibs ${PYTHON_VERSION_FULL} EXACT)
|
||||||
else()
|
else()
|
||||||
find_host_package(PythonLibs ${PYTHON_VERSION_FULL})
|
find_package(PythonLibs ${PYTHON_VERSION_FULL})
|
||||||
endif()
|
endif()
|
||||||
# cmake 2.4 (at least on Ubuntu 8.04 (hardy)) don't define PYTHONLIBS_FOUND
|
# cmake 2.4 (at least on Ubuntu 8.04 (hardy)) don't define PYTHONLIBS_FOUND
|
||||||
if(NOT PYTHONLIBS_FOUND AND PYTHON_INCLUDE_PATH)
|
if(NOT PYTHONLIBS_FOUND AND PYTHON_INCLUDE_PATH)
|
||||||
@@ -81,24 +83,39 @@ if(PYTHON_EXECUTABLE)
|
|||||||
SET(PYTHON_PACKAGES_PATH "${_PYTHON_PACKAGES_PATH}" CACHE PATH "Where to install the python packages.")
|
SET(PYTHON_PACKAGES_PATH "${_PYTHON_PACKAGES_PATH}" CACHE PATH "Where to install the python packages.")
|
||||||
|
|
||||||
if(NOT PYTHON_NUMPY_INCLUDE_DIR)
|
if(NOT PYTHON_NUMPY_INCLUDE_DIR)
|
||||||
# Attempt to discover the NumPy include directory. If this succeeds, then build python API with NumPy
|
if(CMAKE_CROSSCOMPILING)
|
||||||
execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "import os; os.environ['DISTUTILS_USE_SDK']='1'; import numpy.distutils; print numpy.distutils.misc_util.get_numpy_include_dirs()[0]"
|
message(STATUS "Cannot probe for Python/Numpy support (because we are cross-compiling OpenCV)")
|
||||||
RESULT_VARIABLE PYTHON_NUMPY_PROCESS
|
message(STATUS "If you want to enable Python/Numpy support, set the following variables:")
|
||||||
OUTPUT_VARIABLE PYTHON_NUMPY_INCLUDE_DIR
|
message(STATUS " PYTHON_INCLUDE_PATH")
|
||||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
message(STATUS " PYTHON_LIBRARIES")
|
||||||
|
message(STATUS " PYTHON_NUMPY_INCLUDE_DIR")
|
||||||
|
else()
|
||||||
|
# Attempt to discover the NumPy include directory. If this succeeds, then build python API with NumPy
|
||||||
|
execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "import os; os.environ['DISTUTILS_USE_SDK']='1'; import numpy.distutils; print numpy.distutils.misc_util.get_numpy_include_dirs()[0]"
|
||||||
|
RESULT_VARIABLE PYTHON_NUMPY_PROCESS
|
||||||
|
OUTPUT_VARIABLE PYTHON_NUMPY_INCLUDE_DIR
|
||||||
|
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||||
|
|
||||||
if(PYTHON_NUMPY_PROCESS EQUAL 0)
|
if(NOT PYTHON_NUMPY_PROCESS EQUAL 0)
|
||||||
file(TO_CMAKE_PATH "${PYTHON_NUMPY_INCLUDE_DIR}" _PYTHON_NUMPY_INCLUDE_DIR)
|
unset(PYTHON_NUMPY_INCLUDE_DIR)
|
||||||
set(PYTHON_NUMPY_INCLUDE_DIR ${_PYTHON_NUMPY_INCLUDE_DIR} CACHE PATH "Path to numpy headers")
|
endif()
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(PYTHON_NUMPY_INCLUDE_DIR)
|
if(PYTHON_NUMPY_INCLUDE_DIR)
|
||||||
|
file(TO_CMAKE_PATH "${PYTHON_NUMPY_INCLUDE_DIR}" _PYTHON_NUMPY_INCLUDE_DIR)
|
||||||
|
set(PYTHON_NUMPY_INCLUDE_DIR ${_PYTHON_NUMPY_INCLUDE_DIR} CACHE PATH "Path to numpy headers")
|
||||||
set(PYTHON_USE_NUMPY TRUE)
|
set(PYTHON_USE_NUMPY TRUE)
|
||||||
execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "import numpy; print numpy.version.version"
|
if(CMAKE_CROSSCOMPILING)
|
||||||
|
if(NOT PYTHON_NUMPY_VERSION)
|
||||||
|
set(PYTHON_NUMPY_VERSION "undefined - cannot be probed because of the cross-compilation")
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "import numpy; print numpy.version.version"
|
||||||
RESULT_VARIABLE PYTHON_NUMPY_PROCESS
|
RESULT_VARIABLE PYTHON_NUMPY_PROCESS
|
||||||
OUTPUT_VARIABLE PYTHON_NUMPY_VERSION
|
OUTPUT_VARIABLE PYTHON_NUMPY_VERSION
|
||||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
endif(NOT ANDROID AND NOT IOS)
|
endif(NOT ANDROID AND NOT IOS)
|
||||||
|
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user