Merge pull request !8176 from HuKang/kangMastertags/v1.1.0
| @@ -37,39 +37,39 @@ using mindspore::dataset::LDataType; | |||
| static const int RET_GARBAGE_SORT_SUM = 4; | |||
| static const char *labels_name_grbage_sort_map[RET_GARBAGE_SORT_SUM] = {{"可回收物"}, | |||
| {"干垃圾"}, | |||
| {"有害垃圾"}, | |||
| {"湿垃圾"}}; | |||
| static const char *labels_name_grbage_sort_map[RET_GARBAGE_SORT_SUM] = {"可回收物", | |||
| "干垃圾", | |||
| "有害垃圾", | |||
| "湿垃圾"}; | |||
| static const int RET_GARBAGE_DETAILED_SUM = 26; | |||
| static const char *labels_name_grbage_detailed_map[RET_GARBAGE_DETAILED_SUM] = { | |||
| {"塑料瓶"}, | |||
| {"帽子"}, | |||
| {"报纸"}, | |||
| {"易拉罐"}, | |||
| {"玻璃制品"}, | |||
| {"玻璃瓶"}, | |||
| {"硬纸板"}, | |||
| {"篮球"}, | |||
| {"纸张"}, | |||
| {"金属制品"}, | |||
| {"一次性筷子"}, | |||
| {"打火机"}, | |||
| {"扫把"}, | |||
| {"旧镜子"}, | |||
| {"牙刷"}, | |||
| {"脏污衣服"}, | |||
| {"贝壳"}, | |||
| {"陶瓷碗"}, | |||
| {"油漆桶"}, | |||
| {"电池"}, | |||
| {"荧光灯"}, | |||
| {"药片胶囊"}, | |||
| {"橙皮"}, | |||
| {"菜叶"}, | |||
| {"蛋壳"}, | |||
| {"香蕉皮"}}; | |||
| "塑料瓶", | |||
| "帽子", | |||
| "报纸", | |||
| "易拉罐", | |||
| "玻璃制品", | |||
| "玻璃瓶", | |||
| "硬纸板", | |||
| "篮球", | |||
| "纸张", | |||
| "金属制品", | |||
| "一次性筷子", | |||
| "打火机", | |||
| "扫把", | |||
| "旧镜子", | |||
| "牙刷", | |||
| "脏污衣服", | |||
| "贝壳", | |||
| "陶瓷碗", | |||
| "油漆桶", | |||
| "电池", | |||
| "荧光灯", | |||
| "药片胶囊", | |||
| "橙皮", | |||
| "菜叶", | |||
| "蛋壳", | |||
| "香蕉皮"}; | |||
| char *CreateLocalModelBuffer(JNIEnv *env, jobject modelBuffer) { | |||
| @@ -38,416 +38,416 @@ using mindspore::dataset::LDataType; | |||
| static const int RET_CATEGORY_SUM = 410; | |||
| static const char *labels_name_map[RET_CATEGORY_SUM] = { | |||
| {"Herd"}, | |||
| {"Safari"}, | |||
| {"Bangle"}, | |||
| {"Cushion"}, | |||
| {"Countertop"}, | |||
| {"Prom"}, | |||
| {"Branch"}, | |||
| {"Sports"}, | |||
| {"Sky"}, | |||
| {"Community"}, | |||
| {"Wheel"}, | |||
| {"Cola"}, | |||
| {"Tuxedo"}, | |||
| {"Flowerpot"}, | |||
| {"Team"}, | |||
| {"Computer"}, | |||
| {"Unicycle"}, | |||
| {"Brig"}, | |||
| {"Aerospace engineering"}, | |||
| {"Scuba diving"}, | |||
| {"Goggles"}, | |||
| {"Fruit"}, | |||
| {"Badminton"}, | |||
| {"Horse"}, | |||
| {"Sunglasses"}, | |||
| {"Fun"}, | |||
| {"Prairie"}, | |||
| {"Poster"}, | |||
| {"Flag"}, | |||
| {"Speedboat"}, | |||
| {"Eyelash"}, | |||
| {"Veil"}, | |||
| {"Mobile phone"}, | |||
| {"Wheelbarrow"}, | |||
| {"Saucer"}, | |||
| {"Leather"}, | |||
| {"Drawer"}, | |||
| {"Paper"}, | |||
| {"Pier"}, | |||
| {"Waterfowl"}, | |||
| {"Tights"}, | |||
| {"Rickshaw"}, | |||
| {"Vegetable"}, | |||
| {"Handrail"}, | |||
| {"Ice"}, | |||
| {"Metal"}, | |||
| {"Flower"}, | |||
| {"Wing"}, | |||
| {"Silverware"}, | |||
| {"Event"}, | |||
| {"Skyline"}, | |||
| {"Money"}, | |||
| {"Comics"}, | |||
| {"Handbag"}, | |||
| {"Porcelain"}, | |||
| {"Rodeo"}, | |||
| {"Curtain"}, | |||
| {"Tile"}, | |||
| {"Human mouth"}, | |||
| {"Army"}, | |||
| {"Menu"}, | |||
| {"Boat"}, | |||
| {"Snowboarding"}, | |||
| {"Cairn terrier"}, | |||
| {"Net"}, | |||
| {"Pasteles"}, | |||
| {"Cup"}, | |||
| {"Rugby"}, | |||
| {"Pho"}, | |||
| {"Cap"}, | |||
| {"Human hair"}, | |||
| {"Surfing"}, | |||
| {"Loveseat"}, | |||
| {"Museum"}, | |||
| {"Shipwreck"}, | |||
| {"Trunk (Tree)"}, | |||
| {"Plush"}, | |||
| {"Monochrome"}, | |||
| {"Volcano"}, | |||
| {"Rock"}, | |||
| {"Pillow"}, | |||
| {"Presentation"}, | |||
| {"Nebula"}, | |||
| {"Subwoofer"}, | |||
| {"Lake"}, | |||
| {"Sledding"}, | |||
| {"Bangs"}, | |||
| {"Tablecloth"}, | |||
| {"Necklace"}, | |||
| {"Swimwear"}, | |||
| {"Standing"}, | |||
| {"Jeans"}, | |||
| {"Carnival"}, | |||
| {"Softball"}, | |||
| {"Centrepiece"}, | |||
| {"Skateboarder"}, | |||
| {"Cake"}, | |||
| {"Dragon"}, | |||
| {"Aurora"}, | |||
| {"Skiing"}, | |||
| {"Bathroom"}, | |||
| {"Dog"}, | |||
| {"Needlework"}, | |||
| {"Umbrella"}, | |||
| {"Church"}, | |||
| {"Fire"}, | |||
| {"Piano"}, | |||
| {"Denim"}, | |||
| {"Bridle"}, | |||
| {"Cabinetry"}, | |||
| {"Lipstick"}, | |||
| {"Ring"}, | |||
| {"Television"}, | |||
| {"Roller"}, | |||
| {"Seal"}, | |||
| {"Concert"}, | |||
| {"Product"}, | |||
| {"News"}, | |||
| {"Fast food"}, | |||
| {"Horn (Animal)"}, | |||
| {"Tattoo"}, | |||
| {"Bird"}, | |||
| {"Bridegroom"}, | |||
| {"Love"}, | |||
| {"Helmet"}, | |||
| {"Dinosaur"}, | |||
| {"Icing"}, | |||
| {"Miniature"}, | |||
| {"Tire"}, | |||
| {"Toy"}, | |||
| {"Icicle"}, | |||
| {"Jacket"}, | |||
| {"Coffee"}, | |||
| {"Mosque"}, | |||
| {"Rowing"}, | |||
| {"Wetsuit"}, | |||
| {"Camping"}, | |||
| {"Underwater"}, | |||
| {"Christmas"}, | |||
| {"Gelato"}, | |||
| {"Whiteboard"}, | |||
| {"Field"}, | |||
| {"Ragdoll"}, | |||
| {"Construction"}, | |||
| {"Lampshade"}, | |||
| {"Palace"}, | |||
| {"Meal"}, | |||
| {"Factory"}, | |||
| {"Cage"}, | |||
| {"Clipper (Boat)"}, | |||
| {"Gymnastics"}, | |||
| {"Turtle"}, | |||
| {"Human foot"}, | |||
| {"Marriage"}, | |||
| {"Web page"}, | |||
| {"Human beard"}, | |||
| {"Fog"}, | |||
| {"Wool"}, | |||
| {"Cappuccino"}, | |||
| {"Lighthouse"}, | |||
| {"Lego"}, | |||
| {"Sparkler"}, | |||
| {"Sari"}, | |||
| {"Model"}, | |||
| {"Temple"}, | |||
| {"Beanie"}, | |||
| {"Building"}, | |||
| {"Waterfall"}, | |||
| {"Penguin"}, | |||
| {"Cave"}, | |||
| {"Stadium"}, | |||
| {"Smile"}, | |||
| {"Human hand"}, | |||
| {"Park"}, | |||
| {"Desk"}, | |||
| {"Shetland sheepdog"}, | |||
| {"Bar"}, | |||
| {"Eating"}, | |||
| {"Neon"}, | |||
| {"Dalmatian"}, | |||
| {"Crocodile"}, | |||
| {"Wakeboarding"}, | |||
| {"Longboard"}, | |||
| {"Road"}, | |||
| {"Race"}, | |||
| {"Kitchen"}, | |||
| {"Odometer"}, | |||
| {"Cliff"}, | |||
| {"Fiction"}, | |||
| {"School"}, | |||
| {"Interaction"}, | |||
| {"Bullfighting"}, | |||
| {"Boxer"}, | |||
| {"Gown"}, | |||
| {"Aquarium"}, | |||
| {"Superhero"}, | |||
| {"Pie"}, | |||
| {"Asphalt"}, | |||
| {"Surfboard"}, | |||
| {"Cheeseburger"}, | |||
| {"Screenshot"}, | |||
| {"Supper"}, | |||
| {"Laugh"}, | |||
| {"Lunch"}, | |||
| {"Party "}, | |||
| {"Glacier"}, | |||
| {"Bench"}, | |||
| {"Grandparent"}, | |||
| {"Sink"}, | |||
| {"Pomacentridae"}, | |||
| {"Blazer"}, | |||
| {"Brick"}, | |||
| {"Space"}, | |||
| {"Backpacking"}, | |||
| {"Stuffed toy"}, | |||
| {"Sushi"}, | |||
| {"Glitter"}, | |||
| {"Bonfire"}, | |||
| {"Castle"}, | |||
| {"Marathon"}, | |||
| {"Pizza"}, | |||
| {"Beach"}, | |||
| {"Human ear"}, | |||
| {"Racing"}, | |||
| {"Sitting"}, | |||
| {"Iceberg"}, | |||
| {"Shelf"}, | |||
| {"Vehicle"}, | |||
| {"Pop music"}, | |||
| {"Playground"}, | |||
| {"Clown"}, | |||
| {"Car"}, | |||
| {"Rein"}, | |||
| {"Fur"}, | |||
| {"Musician"}, | |||
| {"Casino"}, | |||
| {"Baby"}, | |||
| {"Alcohol"}, | |||
| {"Strap"}, | |||
| {"Reef"}, | |||
| {"Balloon"}, | |||
| {"Outerwear"}, | |||
| {"Cathedral"}, | |||
| {"Competition"}, | |||
| {"Joker"}, | |||
| {"Blackboard"}, | |||
| {"Bunk bed"}, | |||
| {"Bear"}, | |||
| {"Moon"}, | |||
| {"Archery"}, | |||
| {"Polo"}, | |||
| {"River"}, | |||
| {"Fishing"}, | |||
| {"Ferris wheel"}, | |||
| {"Mortarboard"}, | |||
| {"Bracelet"}, | |||
| {"Flesh"}, | |||
| {"Statue"}, | |||
| {"Farm"}, | |||
| {"Desert"}, | |||
| {"Chain"}, | |||
| {"Aircraft"}, | |||
| {"Textile"}, | |||
| {"Hot dog"}, | |||
| {"Knitting"}, | |||
| {"Singer"}, | |||
| {"Juice"}, | |||
| {"Circus"}, | |||
| {"Chair"}, | |||
| {"Musical instrument"}, | |||
| {"Room"}, | |||
| {"Crochet"}, | |||
| {"Sailboat"}, | |||
| {"Newspaper"}, | |||
| {"Santa claus"}, | |||
| {"Swamp"}, | |||
| {"Skyscraper"}, | |||
| {"Skin"}, | |||
| {"Rocket"}, | |||
| {"Aviation"}, | |||
| {"Airliner"}, | |||
| {"Garden"}, | |||
| {"Ruins"}, | |||
| {"Storm"}, | |||
| {"Glasses"}, | |||
| {"Balance"}, | |||
| {"Nail (Body part)"}, | |||
| {"Rainbow"}, | |||
| {"Soil "}, | |||
| {"Vacation "}, | |||
| {"Moustache"}, | |||
| {"Doily"}, | |||
| {"Food"}, | |||
| {"Bride "}, | |||
| {"Cattle"}, | |||
| {"Pocket"}, | |||
| {"Infrastructure"}, | |||
| {"Train"}, | |||
| {"Gerbil"}, | |||
| {"Fireworks"}, | |||
| {"Pet"}, | |||
| {"Dam"}, | |||
| {"Crew"}, | |||
| {"Couch"}, | |||
| {"Bathing"}, | |||
| {"Quilting"}, | |||
| {"Motorcycle"}, | |||
| {"Butterfly"}, | |||
| {"Sled"}, | |||
| {"Watercolor paint"}, | |||
| {"Rafting"}, | |||
| {"Monument"}, | |||
| {"Lightning"}, | |||
| {"Sunset"}, | |||
| {"Bumper"}, | |||
| {"Shoe"}, | |||
| {"Waterskiing"}, | |||
| {"Sneakers"}, | |||
| {"Tower"}, | |||
| {"Insect"}, | |||
| {"Pool"}, | |||
| {"Placemat"}, | |||
| {"Airplane"}, | |||
| {"Plant"}, | |||
| {"Jungle"}, | |||
| {"Armrest"}, | |||
| {"Duck"}, | |||
| {"Dress"}, | |||
| {"Tableware"}, | |||
| {"Petal"}, | |||
| {"Bus"}, | |||
| {"Hanukkah"}, | |||
| {"Forest"}, | |||
| {"Hat"}, | |||
| {"Barn"}, | |||
| {"Tubing"}, | |||
| {"Snorkeling"}, | |||
| {"Cool"}, | |||
| {"Cookware and bakeware"}, | |||
| {"Cycling"}, | |||
| {"Swing (Seat)"}, | |||
| {"Muscle"}, | |||
| {"Cat"}, | |||
| {"Skateboard"}, | |||
| {"Star"}, | |||
| {"Toe"}, | |||
| {"Junk"}, | |||
| {"Bicycle"}, | |||
| {"Bedroom"}, | |||
| {"Person"}, | |||
| {"Sand"}, | |||
| {"Canyon"}, | |||
| {"Tie"}, | |||
| {"Twig"}, | |||
| {"Sphynx"}, | |||
| {"Supervillain"}, | |||
| {"Nightclub"}, | |||
| {"Ranch"}, | |||
| {"Pattern"}, | |||
| {"Shorts"}, | |||
| {"Himalayan"}, | |||
| {"Wall"}, | |||
| {"Leggings"}, | |||
| {"Windsurfing"}, | |||
| {"Deejay"}, | |||
| {"Dance"}, | |||
| {"Van"}, | |||
| {"Bento"}, | |||
| {"Sleep"}, | |||
| {"Wine"}, | |||
| {"Picnic"}, | |||
| {"Leisure"}, | |||
| {"Dune"}, | |||
| {"Crowd"}, | |||
| {"Kayak"}, | |||
| {"Ballroom"}, | |||
| {"Selfie"}, | |||
| {"Graduation"}, | |||
| {"Frigate"}, | |||
| {"Mountain"}, | |||
| {"Dude"}, | |||
| {"Windshield"}, | |||
| {"Skiff"}, | |||
| {"Class"}, | |||
| {"Scarf"}, | |||
| {"Bull"}, | |||
| {"Soccer"}, | |||
| {"Bag"}, | |||
| {"Basset hound"}, | |||
| {"Tractor"}, | |||
| {"Swimming"}, | |||
| {"Running"}, | |||
| {"Track"}, | |||
| {"Helicopter"}, | |||
| {"Pitch"}, | |||
| {"Clock"}, | |||
| {"Song"}, | |||
| {"Jersey"}, | |||
| {"Stairs"}, | |||
| {"Flap"}, | |||
| {"Jewellery"}, | |||
| {"Bridge"}, | |||
| {"Cuisine"}, | |||
| {"Bread"}, | |||
| {"Caving"}, | |||
| {"Shell"}, | |||
| {"Wreath"}, | |||
| {"Roof"}, | |||
| {"Cookie"}, | |||
| {"Canoe"}}; | |||
| "Herd", | |||
| "Safari", | |||
| "Bangle", | |||
| "Cushion", | |||
| "Countertop", | |||
| "Prom", | |||
| "Branch", | |||
| "Sports", | |||
| "Sky", | |||
| "Community", | |||
| "Wheel", | |||
| "Cola", | |||
| "Tuxedo", | |||
| "Flowerpot", | |||
| "Team", | |||
| "Computer", | |||
| "Unicycle", | |||
| "Brig", | |||
| "Aerospace engineering", | |||
| "Scuba diving", | |||
| "Goggles", | |||
| "Fruit", | |||
| "Badminton", | |||
| "Horse", | |||
| "Sunglasses", | |||
| "Fun", | |||
| "Prairie", | |||
| "Poster", | |||
| "Flag", | |||
| "Speedboat", | |||
| "Eyelash", | |||
| "Veil", | |||
| "Mobile phone", | |||
| "Wheelbarrow", | |||
| "Saucer", | |||
| "Leather", | |||
| "Drawer", | |||
| "Paper", | |||
| "Pier", | |||
| "Waterfowl", | |||
| "Tights", | |||
| "Rickshaw", | |||
| "Vegetable", | |||
| "Handrail", | |||
| "Ice", | |||
| "Metal", | |||
| "Flower", | |||
| "Wing", | |||
| "Silverware", | |||
| "Event", | |||
| "Skyline", | |||
| "Money", | |||
| "Comics", | |||
| "Handbag", | |||
| "Porcelain", | |||
| "Rodeo", | |||
| "Curtain", | |||
| "Tile", | |||
| "Human mouth", | |||
| "Army", | |||
| "Menu", | |||
| "Boat", | |||
| "Snowboarding", | |||
| "Cairn terrier", | |||
| "Net", | |||
| "Pasteles", | |||
| "Cup", | |||
| "Rugby", | |||
| "Pho", | |||
| "Cap", | |||
| "Human hair", | |||
| "Surfing", | |||
| "Loveseat", | |||
| "Museum", | |||
| "Shipwreck", | |||
| "Trunk (Tree)", | |||
| "Plush", | |||
| "Monochrome", | |||
| "Volcano", | |||
| "Rock", | |||
| "Pillow", | |||
| "Presentation", | |||
| "Nebula", | |||
| "Subwoofer", | |||
| "Lake", | |||
| "Sledding", | |||
| "Bangs", | |||
| "Tablecloth", | |||
| "Necklace", | |||
| "Swimwear", | |||
| "Standing", | |||
| "Jeans", | |||
| "Carnival", | |||
| "Softball", | |||
| "Centrepiece", | |||
| "Skateboarder", | |||
| "Cake", | |||
| "Dragon", | |||
| "Aurora", | |||
| "Skiing", | |||
| "Bathroom", | |||
| "Dog", | |||
| "Needlework", | |||
| "Umbrella", | |||
| "Church", | |||
| "Fire", | |||
| "Piano", | |||
| "Denim", | |||
| "Bridle", | |||
| "Cabinetry", | |||
| "Lipstick", | |||
| "Ring", | |||
| "Television", | |||
| "Roller", | |||
| "Seal", | |||
| "Concert", | |||
| "Product", | |||
| "News", | |||
| "Fast food", | |||
| "Horn (Animal)", | |||
| "Tattoo", | |||
| "Bird", | |||
| "Bridegroom", | |||
| "Love", | |||
| "Helmet", | |||
| "Dinosaur", | |||
| "Icing", | |||
| "Miniature", | |||
| "Tire", | |||
| "Toy", | |||
| "Icicle", | |||
| "Jacket", | |||
| "Coffee", | |||
| "Mosque", | |||
| "Rowing", | |||
| "Wetsuit", | |||
| "Camping", | |||
| "Underwater", | |||
| "Christmas", | |||
| "Gelato", | |||
| "Whiteboard", | |||
| "Field", | |||
| "Ragdoll", | |||
| "Construction", | |||
| "Lampshade", | |||
| "Palace", | |||
| "Meal", | |||
| "Factory", | |||
| "Cage", | |||
| "Clipper (Boat)", | |||
| "Gymnastics", | |||
| "Turtle", | |||
| "Human foot", | |||
| "Marriage", | |||
| "Web page", | |||
| "Human beard", | |||
| "Fog", | |||
| "Wool", | |||
| "Cappuccino", | |||
| "Lighthouse", | |||
| "Lego", | |||
| "Sparkler", | |||
| "Sari", | |||
| "Model", | |||
| "Temple", | |||
| "Beanie", | |||
| "Building", | |||
| "Waterfall", | |||
| "Penguin", | |||
| "Cave", | |||
| "Stadium", | |||
| "Smile", | |||
| "Human hand", | |||
| "Park", | |||
| "Desk", | |||
| "Shetland sheepdog", | |||
| "Bar", | |||
| "Eating", | |||
| "Neon", | |||
| "Dalmatian", | |||
| "Crocodile", | |||
| "Wakeboarding", | |||
| "Longboard", | |||
| "Road", | |||
| "Race", | |||
| "Kitchen", | |||
| "Odometer", | |||
| "Cliff", | |||
| "Fiction", | |||
| "School", | |||
| "Interaction", | |||
| "Bullfighting", | |||
| "Boxer", | |||
| "Gown", | |||
| "Aquarium", | |||
| "Superhero", | |||
| "Pie", | |||
| "Asphalt", | |||
| "Surfboard", | |||
| "Cheeseburger", | |||
| "Screenshot", | |||
| "Supper", | |||
| "Laugh", | |||
| "Lunch", | |||
| "Party ", | |||
| "Glacier", | |||
| "Bench", | |||
| "Grandparent", | |||
| "Sink", | |||
| "Pomacentridae", | |||
| "Blazer", | |||
| "Brick", | |||
| "Space", | |||
| "Backpacking", | |||
| "Stuffed toy", | |||
| "Sushi", | |||
| "Glitter", | |||
| "Bonfire", | |||
| "Castle", | |||
| "Marathon", | |||
| "Pizza", | |||
| "Beach", | |||
| "Human ear", | |||
| "Racing", | |||
| "Sitting", | |||
| "Iceberg", | |||
| "Shelf", | |||
| "Vehicle", | |||
| "Pop music", | |||
| "Playground", | |||
| "Clown", | |||
| "Car", | |||
| "Rein", | |||
| "Fur", | |||
| "Musician", | |||
| "Casino", | |||
| "Baby", | |||
| "Alcohol", | |||
| "Strap", | |||
| "Reef", | |||
| "Balloon", | |||
| "Outerwear", | |||
| "Cathedral", | |||
| "Competition", | |||
| "Joker", | |||
| "Blackboard", | |||
| "Bunk bed", | |||
| "Bear", | |||
| "Moon", | |||
| "Archery", | |||
| "Polo", | |||
| "River", | |||
| "Fishing", | |||
| "Ferris wheel", | |||
| "Mortarboard", | |||
| "Bracelet", | |||
| "Flesh", | |||
| "Statue", | |||
| "Farm", | |||
| "Desert", | |||
| "Chain", | |||
| "Aircraft", | |||
| "Textile", | |||
| "Hot dog", | |||
| "Knitting", | |||
| "Singer", | |||
| "Juice", | |||
| "Circus", | |||
| "Chair", | |||
| "Musical instrument", | |||
| "Room", | |||
| "Crochet", | |||
| "Sailboat", | |||
| "Newspaper", | |||
| "Santa claus", | |||
| "Swamp", | |||
| "Skyscraper", | |||
| "Skin", | |||
| "Rocket", | |||
| "Aviation", | |||
| "Airliner", | |||
| "Garden", | |||
| "Ruins", | |||
| "Storm", | |||
| "Glasses", | |||
| "Balance", | |||
| "Nail (Body part)", | |||
| "Rainbow", | |||
| "Soil ", | |||
| "Vacation ", | |||
| "Moustache", | |||
| "Doily", | |||
| "Food", | |||
| "Bride ", | |||
| "Cattle", | |||
| "Pocket", | |||
| "Infrastructure", | |||
| "Train", | |||
| "Gerbil", | |||
| "Fireworks", | |||
| "Pet", | |||
| "Dam", | |||
| "Crew", | |||
| "Couch", | |||
| "Bathing", | |||
| "Quilting", | |||
| "Motorcycle", | |||
| "Butterfly", | |||
| "Sled", | |||
| "Watercolor paint", | |||
| "Rafting", | |||
| "Monument", | |||
| "Lightning", | |||
| "Sunset", | |||
| "Bumper", | |||
| "Shoe", | |||
| "Waterskiing", | |||
| "Sneakers", | |||
| "Tower", | |||
| "Insect", | |||
| "Pool", | |||
| "Placemat", | |||
| "Airplane", | |||
| "Plant", | |||
| "Jungle", | |||
| "Armrest", | |||
| "Duck", | |||
| "Dress", | |||
| "Tableware", | |||
| "Petal", | |||
| "Bus", | |||
| "Hanukkah", | |||
| "Forest", | |||
| "Hat", | |||
| "Barn", | |||
| "Tubing", | |||
| "Snorkeling", | |||
| "Cool", | |||
| "Cookware and bakeware", | |||
| "Cycling", | |||
| "Swing (Seat)", | |||
| "Muscle", | |||
| "Cat", | |||
| "Skateboard", | |||
| "Star", | |||
| "Toe", | |||
| "Junk", | |||
| "Bicycle", | |||
| "Bedroom", | |||
| "Person", | |||
| "Sand", | |||
| "Canyon", | |||
| "Tie", | |||
| "Twig", | |||
| "Sphynx", | |||
| "Supervillain", | |||
| "Nightclub", | |||
| "Ranch", | |||
| "Pattern", | |||
| "Shorts", | |||
| "Himalayan", | |||
| "Wall", | |||
| "Leggings", | |||
| "Windsurfing", | |||
| "Deejay", | |||
| "Dance", | |||
| "Van", | |||
| "Bento", | |||
| "Sleep", | |||
| "Wine", | |||
| "Picnic", | |||
| "Leisure", | |||
| "Dune", | |||
| "Crowd", | |||
| "Kayak", | |||
| "Ballroom", | |||
| "Selfie", | |||
| "Graduation", | |||
| "Frigate", | |||
| "Mountain", | |||
| "Dude", | |||
| "Windshield", | |||
| "Skiff", | |||
| "Class", | |||
| "Scarf", | |||
| "Bull", | |||
| "Soccer", | |||
| "Bag", | |||
| "Basset hound", | |||
| "Tractor", | |||
| "Swimming", | |||
| "Running", | |||
| "Track", | |||
| "Helicopter", | |||
| "Pitch", | |||
| "Clock", | |||
| "Song", | |||
| "Jersey", | |||
| "Stairs", | |||
| "Flap", | |||
| "Jewellery", | |||
| "Bridge", | |||
| "Cuisine", | |||
| "Bread", | |||
| "Caving", | |||
| "Shell", | |||
| "Wreath", | |||
| "Roof", | |||
| "Cookie", | |||
| "Canoe"}; | |||
| static float g_thres_map[RET_CATEGORY_SUM] = { | |||
| 0.23, 0.03, 0.10, 0.13, 0.03, | |||
| @@ -50,7 +50,7 @@ public class SplashActivity extends AppCompatActivity implements View.OnClickLis | |||
| } | |||
| /** | |||
| * 权限申请结果回调 | |||
| * Authority application result callback | |||
| */ | |||
| @Override | |||
| public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { | |||
| @@ -58,14 +58,14 @@ public class CameraPreview extends TextureView { | |||
| private static final String TAG = "CameraPreview"; | |||
| private static final SparseIntArray ORIENTATIONS = new SparseIntArray();//从屏幕旋转转换为JPEG方向 | |||
| private static final int MAX_PREVIEW_WIDTH = 1920;//Camera2 API 保证的最大预览宽高 | |||
| private static final SparseIntArray ORIENTATIONS = new SparseIntArray();//From screen rotation to JPEG orientation | |||
| private static final int MAX_PREVIEW_WIDTH = 1920;//Camera2 API Guaranteed maximum preview width and height | |||
| private static final int MAX_PREVIEW_HEIGHT = 1080; | |||
| private static final int STATE_PREVIEW = 0;//显示相机预览 | |||
| private static final int STATE_WAITING_LOCK = 1;//焦点锁定中 | |||
| private static final int STATE_WAITING_PRE_CAPTURE = 2;//拍照中 | |||
| private static final int STATE_WAITING_NON_PRE_CAPTURE = 3;//其它状态 | |||
| private static final int STATE_PICTURE_TAKEN = 4;//拍照完毕 | |||
| private static final int STATE_PREVIEW = 0;//Show camera preview | |||
| private static final int STATE_WAITING_LOCK = 1;//Focus locked | |||
| private static final int STATE_WAITING_PRE_CAPTURE = 2;//Taking pictures | |||
| private static final int STATE_WAITING_NON_PRE_CAPTURE = 3;//Other states | |||
| private static final int STATE_PICTURE_TAKEN = 4;//Photo finished | |||
| public static final int OPEN_TYPE_IMAGE = 1; | |||
| public static final int OPEN_TYPE_IMAGE_CUSTOM = 11; | |||
| @@ -78,7 +78,7 @@ public class CameraPreview extends TextureView { | |||
| private int mSensorOrientation; | |||
| private boolean mFlashSupported; | |||
| private Semaphore mCameraOpenCloseLock = new Semaphore(1);//使用信号量 Semaphore 进行多线程任务调度 | |||
| private Semaphore mCameraOpenCloseLock = new Semaphore(1);//Multithreading task scheduling using Semaphore | |||
| private Activity activity; | |||
| private File mFile; | |||
| private HandlerThread mBackgroundThread; | |||
| @@ -153,7 +153,7 @@ public class CameraPreview extends TextureView { | |||
| } | |||
| /** | |||
| * 处理生命周期内的回调事件 | |||
| * Handle callback events in the lifecycle | |||
| */ | |||
| private final SurfaceTextureListener mSurfaceTextureListener = new SurfaceTextureListener() { | |||
| @@ -178,14 +178,14 @@ public class CameraPreview extends TextureView { | |||
| }; | |||
| /** | |||
| * 相机状态改变回调 | |||
| * Camera state change callback | |||
| */ | |||
| private final CameraDevice.StateCallback mStateCallback = new CameraDevice.StateCallback() { | |||
| @Override | |||
| public void onOpened(@NonNull CameraDevice cameraDevice) { | |||
| mCameraOpenCloseLock.release(); | |||
| Log.d(TAG, "相机已打开"); | |||
| Log.d(TAG, "open camera"); | |||
| mCameraDevice = cameraDevice; | |||
| createCameraPreviewSession(); | |||
| } | |||
| @@ -209,7 +209,7 @@ public class CameraPreview extends TextureView { | |||
| }; | |||
| /** | |||
| * 处理与照片捕获相关的事件 | |||
| * Handle events related to photo capture | |||
| */ | |||
| private CameraCaptureSession.CaptureCallback mCaptureCallback = new CameraCaptureSession.CaptureCallback() { | |||
| @@ -289,7 +289,7 @@ public class CameraPreview extends TextureView { | |||
| } | |||
| } | |||
| startBackgroundThread(); | |||
| //当Activity或Fragment OnResume()时,可以冲洗打开一个相机并开始预览,否则,这个Surface已经准备就绪 | |||
| //When activity or fragment onresume(), you can open a camera and start previewing, otherwise, the surface is ready | |||
| if (this.isAvailable()) { | |||
| openCamera(this.getWidth(), this.getHeight()); | |||
| } else { | |||
| @@ -396,7 +396,7 @@ public class CameraPreview extends TextureView { | |||
| } | |||
| /** | |||
| * 根据mCameraId打开相机 | |||
| * Turn on the camera according to the mcameraid | |||
| */ | |||
| private void openCamera(int width, int height) { | |||
| setUpCameraOutputs(width, height); | |||
| @@ -420,10 +420,10 @@ public class CameraPreview extends TextureView { | |||
| } | |||
| /** | |||
| * 设置相机相关的属性或变量 | |||
| * Set camera related properties or variables | |||
| * | |||
| * @param width 相机预览的可用尺寸的宽度 | |||
| * @param height 相机预览的可用尺寸的高度 | |||
| * @param width The width of the available size for the camera preview | |||
| * @param height The height of the available size for the camera preview | |||
| */ | |||
| @SuppressWarnings("SuspiciousNameCombination") | |||
| private void setUpCameraOutputs(int width, int height) { | |||
| @@ -431,7 +431,7 @@ public class CameraPreview extends TextureView { | |||
| try { | |||
| for (String cameraId : manager.getCameraIdList()) { | |||
| CameraCharacteristics characteristics = manager.getCameraCharacteristics(cameraId); | |||
| // 在这个例子中不使用前置摄像头 | |||
| // In this example, the front camera is not used | |||
| Integer facing = characteristics.get(CameraCharacteristics.LENS_FACING); | |||
| if (facing != null && facing == CameraCharacteristics.LENS_FACING_FRONT) { | |||
| continue; | |||
| @@ -510,15 +510,15 @@ public class CameraPreview extends TextureView { | |||
| } catch (CameraAccessException e) { | |||
| e.printStackTrace(); | |||
| } catch (NullPointerException e) { | |||
| Log.e(TAG, "设备不支持Camera2"); | |||
| Log.e(TAG, "Device not supported Camera2"); | |||
| } | |||
| } | |||
| /** | |||
| * 在确定相机预览大小后应调用此方法 | |||
| * This method should be called after determining the camera preview size | |||
| * | |||
| * @param viewWidth 宽 | |||
| * @param viewHeight 高 | |||
| * @param viewWidth width | |||
| * @param viewHeight height | |||
| */ | |||
| private void configureTransform(int viewWidth, int viewHeight) { | |||
| if (null == mPreviewSize || null == activity) { | |||
| @@ -546,15 +546,15 @@ public class CameraPreview extends TextureView { | |||
| /** | |||
| * 获取一个合适的相机预览尺寸 | |||
| * Get a suitable camera preview size | |||
| * | |||
| * @param choices 支持的预览尺寸列表 | |||
| * @param textureViewWidth 相对宽度 | |||
| * @param textureViewHeight 相对高度 | |||
| * @param maxWidth 可以选择的最大宽度 | |||
| * @param maxHeight 可以选择的最大高度 | |||
| * @param aspectRatio 宽高比 | |||
| * @return 最佳预览尺寸 | |||
| * @param choices List of supported preview sizes | |||
| * @param textureViewWidth Relative width | |||
| * @param textureViewHeight Relative height | |||
| * @param maxWidth Maximum width that can be selected | |||
| * @param maxHeight Maximum height that can be selected | |||
| * @param aspectRatio Aspect ratio | |||
| * @return Best preview size | |||
| */ | |||
| private static Size chooseOptimalSize(Size[] choices, int textureViewWidth, int textureViewHeight, | |||
| int maxWidth, int maxHeight, Size aspectRatio) { | |||
| @@ -584,18 +584,18 @@ public class CameraPreview extends TextureView { | |||
| } | |||
| /** | |||
| * 为相机预览创建新的CameraCaptureSession | |||
| * Create new for camera CameraCaptureSession | |||
| */ | |||
| private void createCameraPreviewSession() { | |||
| try { | |||
| SurfaceTexture texture = this.getSurfaceTexture(); | |||
| assert texture != null; | |||
| // 将默认缓冲区的大小配置为想要的相机预览的大小 | |||
| // Configure the size of the default buffer to the size of the desired camera preview | |||
| texture.setDefaultBufferSize(mPreviewSize.getWidth(), mPreviewSize.getHeight()); | |||
| Surface surface = new Surface(texture); | |||
| mPreviewRequestBuilder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW); | |||
| mPreviewRequestBuilder.addTarget(surface); | |||
| // 我们创建一个 CameraCaptureSession 来进行相机预览 | |||
| // We create a camera capture session to preview the camera | |||
| mCameraDevice.createCaptureSession(Arrays.asList(surface, mImageReader.getSurface()), | |||
| new CameraCaptureSession.StateCallback() { | |||
| @@ -604,7 +604,7 @@ public class CameraPreview extends TextureView { | |||
| if (null == mCameraDevice) { | |||
| return; | |||
| } | |||
| // 会话准备好后,我们开始显示预览 | |||
| // When the session is ready, we begin to display the preview | |||
| mCaptureSession = cameraCaptureSession; | |||
| try { | |||
| mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AF_MODE, | |||
| @@ -628,23 +628,23 @@ public class CameraPreview extends TextureView { | |||
| /** | |||
| * 从指定的屏幕旋转中检索照片方向 | |||
| * Retrieve the photo orientation from the specified screen rotation | |||
| * | |||
| * @param rotation 屏幕方向 | |||
| * @return 照片方向(0,90,270,360) | |||
| * @param rotation Screen orientation | |||
| * @return Photo orientation(0,90,270,360) | |||
| */ | |||
| private int getOrientation(int rotation) { | |||
| return (ORIENTATIONS.get(rotation) + mSensorOrientation + 270) % 360; | |||
| } | |||
| /** | |||
| * 锁定焦点 | |||
| * Lock focus | |||
| */ | |||
| private void lockFocus() { | |||
| try { | |||
| // 如何通知相机锁定焦点 | |||
| // How to tell the camera to lock the focus | |||
| mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AF_TRIGGER, CameraMetadata.CONTROL_AF_TRIGGER_START); | |||
| // 通知mCaptureCallback等待锁定 | |||
| // Inform mcapture callback to wait for lock | |||
| mState = STATE_WAITING_LOCK; | |||
| mCaptureSession.capture(mPreviewRequestBuilder.build(), mCaptureCallback, mBackgroundHandler); | |||
| } catch (CameraAccessException e) { | |||
| @@ -653,7 +653,7 @@ public class CameraPreview extends TextureView { | |||
| } | |||
| /** | |||
| * 解锁焦点 | |||
| * Unlock focus | |||
| */ | |||
| private void unlockFocus() { | |||
| try { | |||
| @@ -671,7 +671,7 @@ public class CameraPreview extends TextureView { | |||
| } | |||
| /** | |||
| * 拍摄静态图片 | |||
| * Take still pictures | |||
| */ | |||
| private void captureStillPicture() { | |||
| try { | |||
| @@ -684,7 +684,7 @@ public class CameraPreview extends TextureView { | |||
| captureBuilder.set(CaptureRequest.CONTROL_AF_MODE, | |||
| CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE); | |||
| setAutoFlash(captureBuilder); | |||
| // 方向 | |||
| // direction | |||
| int rotation = activity.getWindowManager().getDefaultDisplay().getRotation(); | |||
| captureBuilder.set(CaptureRequest.JPEG_ORIENTATION, getOrientation(rotation)); | |||
| CameraCaptureSession.CaptureCallback captureCallback | |||
| @@ -725,11 +725,11 @@ public class CameraPreview extends TextureView { | |||
| } | |||
| /** | |||
| * 运行preCapture序列来捕获静止图像 | |||
| * Run the precapture sequence to capture still images | |||
| */ | |||
| private void runPreCaptureSequence() { | |||
| try { | |||
| // 设置拍照参数请求 | |||
| // Set Photo parameter request | |||
| mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER, | |||
| CaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER_START); | |||
| mState = STATE_WAITING_PRE_CAPTURE; | |||
| @@ -740,7 +740,7 @@ public class CameraPreview extends TextureView { | |||
| } | |||
| /** | |||
| * 比较两者大小 | |||
| * Compare the size of the two | |||
| */ | |||
| private static class CompareSizesByArea implements Comparator<Size> { | |||
| @@ -752,7 +752,7 @@ public class CameraPreview extends TextureView { | |||
| } | |||
| /** | |||
| * ImageReader的回调对象 | |||
| * Callback object for imagereader | |||
| */ | |||
| private final ImageReader.OnImageAvailableListener mOnImageAvailableListener | |||
| = new ImageReader.OnImageAvailableListener() { | |||
| @@ -764,7 +764,7 @@ public class CameraPreview extends TextureView { | |||
| }; | |||
| /** | |||
| * 将捕获到的图像保存到指定的文件中 | |||
| * Save the captured image to the specified file | |||
| */ | |||
| private static class ImageSaver implements Runnable { | |||
| @@ -809,7 +809,7 @@ public class CameraPreview extends TextureView { | |||
| } | |||
| /** | |||
| * 关闭相机 | |||
| * closeCamera | |||
| */ | |||
| private void closeCamera() { | |||
| try { | |||
| @@ -1,55 +0,0 @@ | |||
| package com.mindspore.himindspore.contract; | |||
| import android.os.Bundle; | |||
| import android.text.TextUtils; | |||
| import android.view.View; | |||
| import android.widget.Button; | |||
| import android.widget.EditText; | |||
| import android.widget.Toast; | |||
| import androidx.appcompat.app.AppCompatActivity; | |||
| import com.mindspore.himindspore.R; | |||
| import java.util.regex.Matcher; | |||
| import java.util.regex.Pattern; | |||
| public class ContractActivity extends AppCompatActivity implements View.OnClickListener { | |||
| private EditText emailEdit; | |||
| private Button submitBtn; | |||
| @Override | |||
| protected void onCreate(Bundle savedInstanceState) { | |||
| super.onCreate(savedInstanceState); | |||
| setContentView(R.layout.activity_contract); | |||
| emailEdit = findViewById(R.id.emailEditText); | |||
| submitBtn = findViewById(R.id.submitBtn); | |||
| submitBtn.setOnClickListener(this); | |||
| } | |||
| @Override | |||
| public void onClick(View view) { | |||
| if (R.id.submitBtn == view.getId()) { | |||
| String email = emailEdit.getText().toString(); | |||
| if (TextUtils.isEmpty(email)) { | |||
| Toast.makeText(ContractActivity.this,"Please input your email!",Toast.LENGTH_LONG).show(); | |||
| return; | |||
| } | |||
| if (isEmailFormat(email)){ | |||
| }else{ | |||
| Toast.makeText(ContractActivity.this,"The email address you enterd is not in the correct format",Toast.LENGTH_LONG).show(); | |||
| return; | |||
| } | |||
| } | |||
| } | |||
| private boolean isEmailFormat(String emailAdd) { | |||
| Pattern p = Pattern.compile("^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\\.([a-zA-Z0-9_-])+)+$"); | |||
| Matcher m = p.matcher(emailAdd); | |||
| return m.matches(); | |||
| } | |||
| } | |||
| @@ -1,109 +0,0 @@ | |||
| package com.mindspore.himindspore.contract.email; | |||
| import java.util.Properties; | |||
| public class MailInfo { | |||
| private String mailServerHost;// 发送邮件的服务器的IP | |||
| private String mailServerPort;// 发送邮件的服务器的端口 | |||
| private String fromAddress;// 邮件发送者的地址 | |||
| private String toAddress; // 邮件接收者的地址 | |||
| private String userName;// 登陆邮件发送服务器的用户名 | |||
| private String password;// 登陆邮件发送服务器的密码 | |||
| private boolean validate = true;// 是否需要身份验证 | |||
| private String subject;// 邮件主题 | |||
| private String content;// 邮件的文本内容 | |||
| private String[] attachFileNames;// 邮件附件的文件名 | |||
| /** | |||
| * 获得邮件会话属性 | |||
| */ | |||
| public Properties getProperties() { | |||
| Properties p = new Properties(); | |||
| p.put("mail.smtp.host", this.mailServerHost); | |||
| p.put("mail.smtp.port", this.mailServerPort); | |||
| p.put("mail.smtp.auth", validate ? "true" : "false"); | |||
| return p; | |||
| } | |||
| public String getMailServerHost() { | |||
| return mailServerHost; | |||
| } | |||
| public void setMailServerHost(String mailServerHost) { | |||
| this.mailServerHost = mailServerHost; | |||
| } | |||
| public String getMailServerPort() { | |||
| return mailServerPort; | |||
| } | |||
| public void setMailServerPort(String mailServerPort) { | |||
| this.mailServerPort = mailServerPort; | |||
| } | |||
| public boolean isValidate() { | |||
| return validate; | |||
| } | |||
| public void setValidate(boolean validate) { | |||
| this.validate = validate; | |||
| } | |||
| public String[] getAttachFileNames() { | |||
| return attachFileNames; | |||
| } | |||
| public void setAttachFileNames(String[] fileNames) { | |||
| this.attachFileNames = fileNames; | |||
| } | |||
| public String getFromAddress() { | |||
| return fromAddress; | |||
| } | |||
| public void setFromAddress(String fromAddress) { | |||
| this.fromAddress = fromAddress; | |||
| } | |||
| public String getPassword() { | |||
| return password; | |||
| } | |||
| public void setPassword(String password) { | |||
| this.password = password; | |||
| } | |||
| public String getToAddress() { | |||
| return toAddress; | |||
| } | |||
| public void setToAddress(String toAddress) { | |||
| this.toAddress = toAddress; | |||
| } | |||
| public String getUserName() { | |||
| return userName; | |||
| } | |||
| public void setUserName(String userName) { | |||
| this.userName = userName; | |||
| } | |||
| public String getSubject() { | |||
| return subject; | |||
| } | |||
| public void setSubject(String subject) { | |||
| this.subject = subject; | |||
| } | |||
| public String getContent() { | |||
| return content; | |||
| } | |||
| public void setContent(String textContent) { | |||
| this.content = textContent; | |||
| } | |||
| } | |||
| @@ -1,202 +0,0 @@ | |||
| package com.mindspore.himindspore.contract.email; | |||
| import android.util.Log; | |||
| import java.io.File; | |||
| import java.util.Date; | |||
| import java.util.Properties; | |||
| import javax.activation.DataHandler; | |||
| import javax.activation.FileDataSource; | |||
| import javax.mail.Address; | |||
| import javax.mail.Authenticator; | |||
| import javax.mail.BodyPart; | |||
| import javax.mail.Message; | |||
| import javax.mail.MessagingException; | |||
| import javax.mail.Multipart; | |||
| import javax.mail.PasswordAuthentication; | |||
| import javax.mail.Session; | |||
| import javax.mail.Transport; | |||
| import javax.mail.internet.InternetAddress; | |||
| import javax.mail.internet.MimeBodyPart; | |||
| import javax.mail.internet.MimeMessage; | |||
| import javax.mail.internet.MimeMultipart; | |||
| import javax.mail.internet.MimeUtility; | |||
| public class MailSender { | |||
| /** | |||
| * 以文本格式发送邮件 | |||
| * | |||
| * @param mailInfo 待发送的邮件的信息 | |||
| */ | |||
| public boolean sendTextMail(final MailInfo mailInfo) { | |||
| // 判断是否需要身份认证 | |||
| MyAuthenticator authenticator = null; | |||
| Properties pro = mailInfo.getProperties(); | |||
| if (mailInfo.isValidate()) { | |||
| // 如果需要身份认证,则创建一个密码验证器 | |||
| authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword()); | |||
| } | |||
| // 根据邮件会话属性和密码验证器构造一个发送邮件的session | |||
| Session sendMailSession = Session.getDefaultInstance(pro, authenticator); | |||
| // Session sendMailSession = Session.getInstance(pro, new Authenticator() { | |||
| // @Override | |||
| // protected PasswordAuthentication getPasswordAuthentication() { | |||
| // return new PasswordAuthentication(mailInfo.getUserName(),mailInfo.getPassword()); | |||
| // } | |||
| // }); | |||
| try { | |||
| // 根据session创建一个邮件消息 | |||
| Message mailMessage = new MimeMessage(sendMailSession); | |||
| // 创建邮件发送者地址 | |||
| Address from = new InternetAddress(mailInfo.getFromAddress()); | |||
| // 设置邮件消息的发送者 | |||
| mailMessage.setFrom(from); | |||
| // 创建邮件的接收者地址,并设置到邮件消息中 | |||
| Address to = new InternetAddress(mailInfo.getToAddress()); | |||
| mailMessage.setRecipient(Message.RecipientType.TO, to); | |||
| // 设置邮件消息的主题 | |||
| mailMessage.setSubject(mailInfo.getSubject()); | |||
| // 设置邮件消息发送的时间 | |||
| mailMessage.setSentDate(new Date()); | |||
| // 设置邮件消息的主要内容 | |||
| String mailContent = mailInfo.getContent(); | |||
| mailMessage.setText(mailContent); | |||
| // 发送邮件 | |||
| Transport.send(mailMessage); | |||
| return true; | |||
| } catch (MessagingException ex) { | |||
| ex.printStackTrace(); | |||
| } | |||
| return false; | |||
| } | |||
| /** | |||
| * 以HTML格式发送邮件 | |||
| * | |||
| * @param mailInfo 待发送的邮件信息 | |||
| */ | |||
| public static boolean sendHtmlMail(MailInfo mailInfo) { | |||
| // 判断是否需要身份认证 | |||
| MyAuthenticator authenticator = null; | |||
| Properties pro = mailInfo.getProperties(); | |||
| // 如果需要身份认证,则创建一个密码验证器 | |||
| if (mailInfo.isValidate()) { | |||
| authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword()); | |||
| } | |||
| // 根据邮件会话属性和密码验证器构造一个发送邮件的session | |||
| Session sendMailSession = Session.getDefaultInstance(pro, authenticator); | |||
| try { | |||
| // 根据session创建一个邮件消息 | |||
| Message mailMessage = new MimeMessage(sendMailSession); | |||
| // 创建邮件发送者地址 | |||
| Address from = new InternetAddress(mailInfo.getFromAddress()); | |||
| // 设置邮件消息的发送者 | |||
| mailMessage.setFrom(from); | |||
| // 创建邮件的接收者地址,并设置到邮件消息中 | |||
| Address to = new InternetAddress(mailInfo.getToAddress()); | |||
| // Message.RecipientType.TO属性表示接收者的类型为TO | |||
| mailMessage.setRecipient(Message.RecipientType.TO, to); | |||
| // 设置邮件消息的主题 | |||
| mailMessage.setSubject(mailInfo.getSubject()); | |||
| // 设置邮件消息发送的时间 | |||
| mailMessage.setSentDate(new Date()); | |||
| // MiniMultipart类是一个容器类,包含MimeBodyPart类型的对象 | |||
| Multipart mainPart = new MimeMultipart(); | |||
| // 创建一个包含HTML内容的MimeBodyPart | |||
| BodyPart html = new MimeBodyPart(); | |||
| // 设置HTML内容 | |||
| html.setContent(mailInfo.getContent(), "text/html; charset=utf-8"); | |||
| mainPart.addBodyPart(html); | |||
| // 将MiniMultipart对象设置为邮件内容 | |||
| mailMessage.setContent(mainPart); | |||
| // 发送邮件 | |||
| Transport.send(mailMessage); | |||
| return true; | |||
| } catch (MessagingException ex) { | |||
| ex.printStackTrace(); | |||
| } | |||
| return false; | |||
| } | |||
| /** | |||
| * 发送带附件的邮件 | |||
| * | |||
| * @param info | |||
| * @return | |||
| */ | |||
| public boolean sendFileMail(MailInfo info, File file) { | |||
| Message attachmentMail = createAttachmentMail(info, file); | |||
| try { | |||
| Transport.send(attachmentMail); | |||
| return true; | |||
| } catch (MessagingException e) { | |||
| e.printStackTrace(); | |||
| return false; | |||
| } | |||
| } | |||
| /** | |||
| * 创建带有附件的邮件 | |||
| * | |||
| * @return | |||
| */ | |||
| private Message createAttachmentMail(final MailInfo info, File file) { | |||
| //创建邮件 | |||
| MimeMessage message = null; | |||
| Properties pro = info.getProperties(); | |||
| try { | |||
| Session sendMailSession = Session.getInstance(pro, new Authenticator() { | |||
| @Override | |||
| protected PasswordAuthentication getPasswordAuthentication() { | |||
| return new PasswordAuthentication(info.getUserName(), info.getPassword()); | |||
| } | |||
| }); | |||
| message = new MimeMessage(sendMailSession); | |||
| // 设置邮件的基本信息 | |||
| //创建邮件发送者地址 | |||
| Address from = new InternetAddress(info.getFromAddress()); | |||
| //设置邮件消息的发送者 | |||
| message.setFrom(from); | |||
| //创建邮件的接受者地址,并设置到邮件消息中 | |||
| Address to = new InternetAddress(info.getToAddress()); | |||
| //设置邮件消息的接受者, Message.RecipientType.TO属性表示接收者的类型为TO | |||
| message.setRecipient(Message.RecipientType.TO, to); | |||
| //邮件标题 | |||
| message.setSubject(info.getSubject()); | |||
| // 创建邮件正文,为了避免邮件正文中文乱码问题,需要使用CharSet=UTF-8指明字符编码 | |||
| MimeBodyPart text = new MimeBodyPart(); | |||
| text.setContent(info.getContent(), "text/html;charset=UTF-8"); | |||
| // 创建容器描述数据关系 | |||
| MimeMultipart mp = new MimeMultipart(); | |||
| mp.addBodyPart(text); | |||
| // 创建邮件附件 | |||
| MimeBodyPart attach = new MimeBodyPart(); | |||
| FileDataSource ds = new FileDataSource(file); | |||
| DataHandler dh = new DataHandler(ds); | |||
| attach.setDataHandler(dh); | |||
| attach.setFileName(MimeUtility.encodeText(dh.getName())); | |||
| mp.addBodyPart(attach); | |||
| mp.setSubType("mixed"); | |||
| message.setContent(mp); | |||
| message.saveChanges(); | |||
| } catch (Exception e) { | |||
| Log.i("TAG","创建带附件的邮件失败"); | |||
| e.printStackTrace(); | |||
| } | |||
| // 返回生成的邮件 | |||
| return message; | |||
| } | |||
| } | |||
| @@ -1,21 +0,0 @@ | |||
| package com.mindspore.himindspore.contract.email; | |||
| import javax.mail.Authenticator; | |||
| import javax.mail.PasswordAuthentication; | |||
| public class MyAuthenticator extends Authenticator { | |||
| String userName = null; | |||
| String password = null; | |||
| public MyAuthenticator() { | |||
| } | |||
| public MyAuthenticator(String username, String password) { | |||
| this.userName = username; | |||
| this.password = password; | |||
| } | |||
| protected PasswordAuthentication getPasswordAuthentication() { | |||
| return new PasswordAuthentication(userName, password); | |||
| } | |||
| } | |||
| @@ -1,51 +0,0 @@ | |||
| package com.mindspore.himindspore.contract.email; | |||
| import androidx.annotation.NonNull; | |||
| import java.io.File; | |||
| public class SendMailUtil { | |||
| public static void send(final File file, String toAdd) { | |||
| final MailInfo mailInfo = creatMail(toAdd); | |||
| final MailSender sms = new MailSender(); | |||
| new Thread(new Runnable() { | |||
| @Override | |||
| public void run() { | |||
| sms.sendFileMail(mailInfo, file); | |||
| } | |||
| }).start(); | |||
| } | |||
| public static void send(String toAdd) { | |||
| final MailInfo mailInfo = creatMail(toAdd); | |||
| final MailSender sms = new MailSender(); | |||
| new Thread(new Runnable() { | |||
| @Override | |||
| public void run() { | |||
| sms.sendTextMail(mailInfo); | |||
| } | |||
| }).start(); | |||
| } | |||
| @NonNull | |||
| private static MailInfo creatMail(String toAdd) { | |||
| // String HOST = ShareUtils.getString(MyApplication.getInstance(), "HOST", ""); | |||
| // String PORT = ShareUtils.getString(MyApplication.getInstance(), "PORT", ""); | |||
| // String FROM_ADD = ShareUtils.getString(MyApplication.getInstance(), "FROM_ADD", ""); | |||
| // String FROM_PSW = ShareUtils.getString(MyApplication.getInstance(), "FROM_PSW", ""); | |||
| final MailInfo mailInfo = new MailInfo(); | |||
| // mailInfo.setMailServerHost(HOST);//发送方邮箱服务器 | |||
| // mailInfo.setMailServerPort(PORT);//发送方邮箱端口号 | |||
| // mailInfo.setValidate(true); | |||
| // mailInfo.setUserName(FROM_ADD); // 发送者邮箱地址 | |||
| // mailInfo.setPassword(FROM_PSW);// 发送者邮箱授权码 | |||
| // mailInfo.setFromAddress(FROM_ADD); // 发送者邮箱 | |||
| // mailInfo.setToAddress(toAdd); // 接收者邮箱 | |||
| // mailInfo.setSubject("Android应用测试"); // 邮件主题 | |||
| // mailInfo.setContent("哈哈"); // 邮件文本 | |||
| return mailInfo; | |||
| } | |||
| } | |||
| @@ -1,185 +0,0 @@ | |||
| package com.mindspore.himindspore.objectdetection.help; | |||
| import android.annotation.SuppressLint; | |||
| import android.content.ContentUris; | |||
| import android.content.Context; | |||
| import android.database.Cursor; | |||
| import android.graphics.Bitmap; | |||
| import android.graphics.Matrix; | |||
| import android.media.ExifInterface; | |||
| import android.net.Uri; | |||
| import android.os.Build; | |||
| import android.os.Environment; | |||
| import android.provider.DocumentsContract; | |||
| import android.provider.MediaStore; | |||
| import java.io.IOException; | |||
| public class ImageDegreeHelper { | |||
| /** | |||
| * 专为Android4.4及以上设计的从Uri获取文件绝对路径,以前的方法已不好使 | |||
| */ | |||
| @SuppressLint("NewApi") | |||
| public static String getPath(final Context context, final Uri uri) { | |||
| final boolean isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT; | |||
| // DocumentProvider | |||
| if (isKitKat && DocumentsContract.isDocumentUri(context, uri)) { | |||
| // ExternalStorageProvider | |||
| if (isExternalStorageDocument(uri)) { | |||
| final String docId = DocumentsContract.getDocumentId(uri); | |||
| final String[] split = docId.split(":"); | |||
| final String type = split[0]; | |||
| if ("primary".equalsIgnoreCase(type)) { | |||
| return Environment.getExternalStorageDirectory() + "/" + split[1]; | |||
| } | |||
| // TODO handle non-primary volumes | |||
| } | |||
| // DownloadsProvider | |||
| else if (isDownloadsDocument(uri)) { | |||
| final String id = DocumentsContract.getDocumentId(uri); | |||
| final Uri contentUri = ContentUris.withAppendedId( | |||
| Uri.parse("content://downloads/public_downloads"), Long.valueOf(id)); | |||
| return getDataColumn(context, contentUri, null, null); | |||
| } | |||
| // MediaProvider | |||
| else if (isMediaDocument(uri)) { | |||
| final String docId = DocumentsContract.getDocumentId(uri); | |||
| final String[] split = docId.split(":"); | |||
| final String type = split[0]; | |||
| Uri contentUri = null; | |||
| if ("image".equals(type)) { | |||
| contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; | |||
| } else if ("video".equals(type)) { | |||
| contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI; | |||
| } else if ("audio".equals(type)) { | |||
| contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; | |||
| } | |||
| final String selection = "_id=?"; | |||
| final String[] selectionArgs = new String[]{split[1]}; | |||
| return getDataColumn(context, contentUri, selection, selectionArgs); | |||
| } | |||
| } | |||
| // MediaStore (and general) | |||
| else if ("content".equalsIgnoreCase(uri.getScheme())) { | |||
| return getDataColumn(context, uri, null, null); | |||
| } | |||
| // File | |||
| else if ("file".equalsIgnoreCase(uri.getScheme())) { | |||
| return uri.getPath(); | |||
| } | |||
| return null; | |||
| } | |||
| /** | |||
| * Get the value of the data column for this Uri. This is useful for | |||
| * MediaStore Uris, and other file-based ContentProviders. | |||
| * | |||
| * @param context The context. | |||
| * @param uri The Uri to query. | |||
| * @param selection (Optional) Filter used in the query. | |||
| * @param selectionArgs (Optional) Selection arguments used in the query. | |||
| * @return The value of the _data column, which is typically a file path. | |||
| */ | |||
| public static String getDataColumn(Context context, Uri uri, String selection, | |||
| String[] selectionArgs) { | |||
| Cursor cursor = null; | |||
| final String column = "_data"; | |||
| final String[] projection = {column}; | |||
| try { | |||
| cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs, | |||
| null); | |||
| if (cursor != null && cursor.moveToFirst()) { | |||
| final int column_index = cursor.getColumnIndexOrThrow(column); | |||
| return cursor.getString(column_index); | |||
| } | |||
| } finally { | |||
| if (cursor != null) | |||
| cursor.close(); | |||
| } | |||
| return null; | |||
| } | |||
| /** | |||
| * @param uri The Uri to check. | |||
| * @return Whether the Uri authority is ExternalStorageProvider. | |||
| */ | |||
| public static boolean isExternalStorageDocument(Uri uri) { | |||
| return "com.android.externalstorage.documents".equals(uri.getAuthority()); | |||
| } | |||
| /** | |||
| * @param uri The Uri to check. | |||
| * @return Whether the Uri authority is DownloadsProvider. | |||
| */ | |||
| public static boolean isDownloadsDocument(Uri uri) { | |||
| return "com.android.providers.downloads.documents".equals(uri.getAuthority()); | |||
| } | |||
| /** | |||
| * @param uri The Uri to check. | |||
| * @return Whether the Uri authority is MediaProvider. | |||
| */ | |||
| public static boolean isMediaDocument(Uri uri) { | |||
| return "com.android.providers.media.documents".equals(uri.getAuthority()); | |||
| } | |||
| /** | |||
| * 读取照片旋转角度 | |||
| * | |||
| * @param path 照片路径 | |||
| * @return 角度 | |||
| */ | |||
| public static int readPictureDegree(String path) { | |||
| int degree = 0; | |||
| try { | |||
| ExifInterface exifInterface = new ExifInterface(path); | |||
| int orientation = exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL); | |||
| switch (orientation) { | |||
| case ExifInterface.ORIENTATION_ROTATE_90: | |||
| degree = 90; | |||
| break; | |||
| case ExifInterface.ORIENTATION_ROTATE_180: | |||
| degree = 180; | |||
| break; | |||
| case ExifInterface.ORIENTATION_ROTATE_270: | |||
| degree = 270; | |||
| break; | |||
| } | |||
| } catch (IOException e) { | |||
| e.printStackTrace(); | |||
| } | |||
| return degree; | |||
| } | |||
| public static Bitmap rotaingImageView(int angle, Bitmap bitmap) { | |||
| Bitmap returnBm = null; | |||
| // 根据旋转角度,生成旋转矩阵 | |||
| Matrix matrix = new Matrix(); | |||
| matrix.postRotate(angle); | |||
| try { | |||
| // 将原始图片按照旋转矩阵进行旋转,并得到新的图片 | |||
| returnBm = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true); | |||
| } catch (OutOfMemoryError e) { | |||
| } | |||
| if (returnBm == null) { | |||
| returnBm = bitmap; | |||
| } | |||
| if (bitmap != returnBm) { | |||
| bitmap.recycle(); | |||
| } | |||
| return returnBm; | |||
| } | |||
| } | |||
| @@ -37,40 +37,39 @@ public class ObjectTrackingMobile implements TrackListener { | |||
| } | |||
| /** | |||
| * jni加载模型 | |||
| * jni Load model | |||
| * | |||
| * @param assetManager assetManager | |||
| * @param buffer buffer | |||
| * @param numThread numThread | |||
| * @return 加载模型数据 | |||
| * @return Load model data | |||
| */ | |||
| public native long loadModel(AssetManager assetManager, ByteBuffer buffer, int numThread); | |||
| /** | |||
| * jni运行模型 | |||
| * jni Run model | |||
| * | |||
| * @param netEnv 加载模型数据 | |||
| * @param img 当前图片 | |||
| * @return 运行模型数据 | |||
| * @param netEnv Load model data | |||
| * @param img Current picture | |||
| * @return Run model data | |||
| */ | |||
| public native String runNet(long netEnv, Bitmap img); | |||
| /** | |||
| * 解绑模型数据 | |||
| * Unbind model data | |||
| * | |||
| * @param netEnv 模型数据 | |||
| * @return 解绑状态 | |||
| * @param netEnv model data | |||
| * @return Unbound state | |||
| */ | |||
| public native boolean unloadModel(long netEnv); | |||
| /** | |||
| * C++侧封装成了MSNetWorks类的方法 | |||
| * C++ encapsulated as a method of the msnetworks class | |||
| * | |||
| * @param assetManager 模型文件位置 | |||
| * @return 加载模型文件状态 | |||
| * @param assetManager Model file location | |||
| * @return Loading model file status | |||
| */ | |||
| public boolean loadModelFromBuf(AssetManager assetManager) { | |||
| // String ModelPath = "model/model_hebing_3branch.ms"; | |||
| String ModelPath = "model/ssd.ms"; | |||
| ByteBuffer buffer = loadModelFile(ModelPath); | |||
| @@ -79,10 +78,10 @@ public class ObjectTrackingMobile implements TrackListener { | |||
| } | |||
| /** | |||
| * 运行Mindspore | |||
| * Run Mindspore | |||
| * | |||
| * @param img 当前图片识别 | |||
| * @return 识别出来的文字信息 | |||
| * @param img Current image recognition | |||
| * @return Recognized text information | |||
| */ | |||
| public String MindSpore_runnet(Bitmap img) { | |||
| String ret_str = runNet(netEnv, img); | |||
| @@ -90,7 +89,7 @@ public class ObjectTrackingMobile implements TrackListener { | |||
| } | |||
| /** | |||
| * 解绑模型 | |||
| * Unbound model | |||
| * @return true | |||
| */ | |||
| public boolean unloadModel() { | |||
| @@ -99,9 +98,9 @@ public class ObjectTrackingMobile implements TrackListener { | |||
| } | |||
| /** | |||
| * 加载模型文件流 | |||
| * @param modelPath 模型文件路径 | |||
| * @return 加载模型文件流 | |||
| * Load model file stream | |||
| * @param modelPath Model file path | |||
| * @return Load model file stream | |||
| */ | |||
| public ByteBuffer loadModelFile(String modelPath) { | |||
| InputStream is = null; | |||
| @@ -19,9 +19,9 @@ import static com.mindspore.himindspore.objectdetection.bean.RecognitionObjectBe | |||
| /** | |||
| * [入口主页面] | |||
| * main page of entrance | |||
| * | |||
| * 向JNI传入图片,测试MindSpore模型加载推理等. | |||
| * Pass in pictures to JNI, test mindspore model, load reasoning, etc | |||
| */ | |||
| public class ObjectCameraActivity extends AppCompatActivity implements CameraPreview.RecognitionDataCallBack { | |||
| @@ -46,7 +46,7 @@ public class ObjectDetectionMainActivity extends AppCompatActivity implements Vi | |||
| } | |||
| /** | |||
| * 权限申请结果回调 | |||
| * Authority application result callback | |||
| */ | |||
| @Override | |||
| public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { | |||
| @@ -113,7 +113,7 @@ public class ObjectPhotoActivity extends AppCompatActivity { | |||
| String result = trackingMobile.MindSpore_runnet(bitmap); | |||
| long endTime = System.currentTimeMillis(); | |||
| Log.d(TAG, "RUNNET 耗时:"+(endTime-startTime)+"ms"); | |||
| Log.d(TAG, "RUNNET CONSUMING:"+(endTime-startTime)+"ms"); | |||
| Log.d(TAG, "result:"+ result); | |||
| recognitionObjectBeanList = getRecognitionList(result); | |||
| @@ -127,7 +127,7 @@ public class ObjectPhotoActivity extends AppCompatActivity { | |||
| Canvas canvas = new Canvas(bitmap); | |||
| Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); | |||
| mPaint.setTextSize(DisplayUtil.sp2px(this,16)); | |||
| //只绘制图形轮廓(描边) | |||
| //Draw only outline (stroke) | |||
| mPaint.setStyle(Paint.Style.STROKE); | |||
| mPaint.setStrokeWidth(DisplayUtil.dip2px(this,2)); | |||
| @@ -19,11 +19,10 @@ import java.util.ArrayList; | |||
| import java.util.List; | |||
| /** | |||
| * 针对物体检测的矩形框绘制类 | |||
| * <p> | |||
| * 使用的API: | |||
| * 1. Canvas:代表“依附”于指定View的画布,用它的方法来绘制各种图形. | |||
| * 2. Paint:代表Canvas上的画笔,用于设置画笔颜色、画笔粗细、填充风格等. | |||
| * Rectangle drawing class for object detection | |||
| * | |||
| * 1. Canvas:Represents the canvas attached to the specified view and uses its method to draw various graphics | |||
| * 2. Paint:Represents the brush on canvas and is used to set brush color, brush thickness, fill style, etc | |||
| */ | |||
| public class ObjectRectView extends View { | |||
| @@ -33,7 +32,7 @@ public class ObjectRectView extends View { | |||
| private List<RecognitionObjectBean> mRecognitions = new ArrayList<>(); | |||
| private Paint mPaint = null; | |||
| // 画框区域. | |||
| // Frame area | |||
| private RectF mObjRectF; | |||
| private Context context; | |||
| @@ -61,13 +60,13 @@ public class ObjectRectView extends View { | |||
| mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); | |||
| mPaint.setTextSize(DisplayUtil.sp2px(context,16)); | |||
| //只绘制图形轮廓(描边) | |||
| //Draw only outline (stroke) | |||
| mPaint.setStyle(Style.STROKE); | |||
| mPaint.setStrokeWidth(DisplayUtil.dip2px(context,2)); | |||
| } | |||
| /** | |||
| * 传入需绘制信息 | |||
| * Input information to be drawn | |||
| * | |||
| * @param recognitions | |||
| */ | |||
| @@ -76,14 +75,11 @@ public class ObjectRectView extends View { | |||
| mRecognitions.clear(); | |||
| mRecognitions.addAll(recognitions); | |||
| //重新draw(). | |||
| invalidate(); | |||
| } | |||
| public void clearCanvas(){ | |||
| mRecognitions.clear(); | |||
| //重新draw(). | |||
| invalidate(); | |||
| } | |||
| @@ -9,37 +9,23 @@ public class DisplayUtil { | |||
| throw new UnsupportedOperationException("cannot be instantiated"); | |||
| } | |||
| /** | |||
| * 将px值转换为dip或dp值,保证尺寸大小不变 | |||
| * DisplayMetrics类中属性density | |||
| */ | |||
| public static int px2dip(Context context, float pxValue) { | |||
| final float scale = context.getResources().getDisplayMetrics().density; | |||
| return (int) (pxValue / scale + 0.5f); | |||
| } | |||
| /** | |||
| * 将dip或dp值转换为px值,保证尺寸大小不变 | |||
| * DisplayMetrics类中属性density | |||
| */ | |||
| public static int dip2px(Context context, float dipValue) { | |||
| final float scale = context.getResources().getDisplayMetrics().density; | |||
| return (int) (dipValue * scale + 0.5f); | |||
| } | |||
| /** | |||
| * 将px值转换为sp值,保证文字大小不变 | |||
| * DisplayMetrics类中属性scaledDensity | |||
| */ | |||
| public static int px2sp(Context context, float pxValue) { | |||
| final float fontScale = context.getResources().getDisplayMetrics().scaledDensity; | |||
| return (int) (pxValue / fontScale + 0.5f); | |||
| } | |||
| /** | |||
| * 将sp值转换为px值,保证文字大小不变 | |||
| * DisplayMetrics类中属性scaledDensity | |||
| */ | |||
| public static int sp2px(Context context, float spValue) { | |||
| final float fontScale = context.getResources().getDisplayMetrics().scaledDensity; | |||
| return (int) (spValue * fontScale + 0.5f); | |||
| @@ -38,88 +38,88 @@ using mindspore::dataset::LDataType; | |||
| static const int RET_CATEGORY_SUM = 410; | |||
| static const char *labels_name_map[RET_CATEGORY_SUM] = { | |||
| {"Herd"}, {"Safari"}, {"Bangle"}, {"Cushion"}, {"Countertop"}, | |||
| {"Prom"}, {"Branch"}, {"Sports"}, {"Sky"}, {"Community"}, | |||
| {"Wheel"}, {"Cola"}, {"Tuxedo"}, {"Flowerpot"}, {"Team"}, | |||
| {"Computer"}, {"Unicycle"}, {"Brig"}, {"Aerospace engineering"}, {"Scuba diving"}, | |||
| {"Goggles"}, {"Fruit"}, {"Badminton"}, {"Horse"}, {"Sunglasses"}, | |||
| {"Fun"}, {"Prairie"}, {"Poster"}, {"Flag"}, {"Speedboat"}, | |||
| {"Eyelash"}, {"Veil"}, {"Mobile phone"}, {"Wheelbarrow"}, {"Saucer"}, | |||
| {"Leather"}, {"Drawer"}, {"Paper"}, {"Pier"}, {"Waterfowl"}, | |||
| {"Tights"}, {"Rickshaw"}, {"Vegetable"}, {"Handrail"}, {"Ice"}, | |||
| {"Metal"}, {"Flower"}, {"Wing"}, {"Silverware"}, {"Event"}, | |||
| {"Skyline"}, {"Money"}, {"Comics"}, {"Handbag"}, {"Porcelain"}, | |||
| {"Rodeo"}, {"Curtain"}, {"Tile"}, {"Human mouth"}, {"Army"}, | |||
| {"Menu"}, {"Boat"}, {"Snowboarding"}, {"Cairn terrier"}, {"Net"}, | |||
| {"Pasteles"}, {"Cup"}, {"Rugby"}, {"Pho"}, {"Cap"}, | |||
| {"Human hair"}, {"Surfing"}, {"Loveseat"}, {"Museum"}, {"Shipwreck"}, | |||
| {"Trunk (Tree)"}, {"Plush"}, {"Monochrome"}, {"Volcano"}, {"Rock"}, | |||
| {"Pillow"}, {"Presentation"}, {"Nebula"}, {"Subwoofer"}, {"Lake"}, | |||
| {"Sledding"}, {"Bangs"}, {"Tablecloth"}, {"Necklace"}, {"Swimwear"}, | |||
| {"Standing"}, {"Jeans"}, {"Carnival"}, {"Softball"}, {"Centrepiece"}, | |||
| {"Skateboarder"}, {"Cake"}, {"Dragon"}, {"Aurora"}, {"Skiing"}, | |||
| {"Bathroom"}, {"Dog"}, {"Needlework"}, {"Umbrella"}, {"Church"}, | |||
| {"Fire"}, {"Piano"}, {"Denim"}, {"Bridle"}, {"Cabinetry"}, | |||
| {"Lipstick"}, {"Ring"}, {"Television"}, {"Roller"}, {"Seal"}, | |||
| {"Concert"}, {"Product"}, {"News"}, {"Fast food"}, {"Horn (Animal)"}, | |||
| {"Tattoo"}, {"Bird"}, {"Bridegroom"}, {"Love"}, {"Helmet"}, | |||
| {"Dinosaur"}, {"Icing"}, {"Miniature"}, {"Tire"}, {"Toy"}, | |||
| {"Icicle"}, {"Jacket"}, {"Coffee"}, {"Mosque"}, {"Rowing"}, | |||
| {"Wetsuit"}, {"Camping"}, {"Underwater"}, {"Christmas"}, {"Gelato"}, | |||
| {"Whiteboard"}, {"Field"}, {"Ragdoll"}, {"Construction"}, {"Lampshade"}, | |||
| {"Palace"}, {"Meal"}, {"Factory"}, {"Cage"}, {"Clipper (Boat)"}, | |||
| {"Gymnastics"}, {"Turtle"}, {"Human foot"}, {"Marriage"}, {"Web page"}, | |||
| {"Human beard"}, {"Fog"}, {"Wool"}, {"Cappuccino"}, {"Lighthouse"}, | |||
| {"Lego"}, {"Sparkler"}, {"Sari"}, {"Model"}, {"Temple"}, | |||
| {"Beanie"}, {"Building"}, {"Waterfall"}, {"Penguin"}, {"Cave"}, | |||
| {"Stadium"}, {"Smile"}, {"Human hand"}, {"Park"}, {"Desk"}, | |||
| {"Shetland sheepdog"}, {"Bar"}, {"Eating"}, {"Neon"}, {"Dalmatian"}, | |||
| {"Crocodile"}, {"Wakeboarding"}, {"Longboard"}, {"Road"}, {"Race"}, | |||
| {"Kitchen"}, {"Odometer"}, {"Cliff"}, {"Fiction"}, {"School"}, | |||
| {"Interaction"}, {"Bullfighting"}, {"Boxer"}, {"Gown"}, {"Aquarium"}, | |||
| {"Superhero"}, {"Pie"}, {"Asphalt"}, {"Surfboard"}, {"Cheeseburger"}, | |||
| {"Screenshot"}, {"Supper"}, {"Laugh"}, {"Lunch"}, {"Party "}, | |||
| {"Glacier"}, {"Bench"}, {"Grandparent"}, {"Sink"}, {"Pomacentridae"}, | |||
| {"Blazer"}, {"Brick"}, {"Space"}, {"Backpacking"}, {"Stuffed toy"}, | |||
| {"Sushi"}, {"Glitter"}, {"Bonfire"}, {"Castle"}, {"Marathon"}, | |||
| {"Pizza"}, {"Beach"}, {"Human ear"}, {"Racing"}, {"Sitting"}, | |||
| {"Iceberg"}, {"Shelf"}, {"Vehicle"}, {"Pop music"}, {"Playground"}, | |||
| {"Clown"}, {"Car"}, {"Rein"}, {"Fur"}, {"Musician"}, | |||
| {"Casino"}, {"Baby"}, {"Alcohol"}, {"Strap"}, {"Reef"}, | |||
| {"Balloon"}, {"Outerwear"}, {"Cathedral"}, {"Competition"}, {"Joker"}, | |||
| {"Blackboard"}, {"Bunk bed"}, {"Bear"}, {"Moon"}, {"Archery"}, | |||
| {"Polo"}, {"River"}, {"Fishing"}, {"Ferris wheel"}, {"Mortarboard"}, | |||
| {"Bracelet"}, {"Flesh"}, {"Statue"}, {"Farm"}, {"Desert"}, | |||
| {"Chain"}, {"Aircraft"}, {"Textile"}, {"Hot dog"}, {"Knitting"}, | |||
| {"Singer"}, {"Juice"}, {"Circus"}, {"Chair"}, {"Musical instrument"}, | |||
| {"Room"}, {"Crochet"}, {"Sailboat"}, {"Newspaper"}, {"Santa claus"}, | |||
| {"Swamp"}, {"Skyscraper"}, {"Skin"}, {"Rocket"}, {"Aviation"}, | |||
| {"Airliner"}, {"Garden"}, {"Ruins"}, {"Storm"}, {"Glasses"}, | |||
| {"Balance"}, {"Nail (Body part)"}, {"Rainbow"}, {"Soil "}, {"Vacation "}, | |||
| {"Moustache"}, {"Doily"}, {"Food"}, {"Bride "}, {"Cattle"}, | |||
| {"Pocket"}, {"Infrastructure"}, {"Train"}, {"Gerbil"}, {"Fireworks"}, | |||
| {"Pet"}, {"Dam"}, {"Crew"}, {"Couch"}, {"Bathing"}, | |||
| {"Quilting"}, {"Motorcycle"}, {"Butterfly"}, {"Sled"}, {"Watercolor paint"}, | |||
| {"Rafting"}, {"Monument"}, {"Lightning"}, {"Sunset"}, {"Bumper"}, | |||
| {"Shoe"}, {"Waterskiing"}, {"Sneakers"}, {"Tower"}, {"Insect"}, | |||
| {"Pool"}, {"Placemat"}, {"Airplane"}, {"Plant"}, {"Jungle"}, | |||
| {"Armrest"}, {"Duck"}, {"Dress"}, {"Tableware"}, {"Petal"}, | |||
| {"Bus"}, {"Hanukkah"}, {"Forest"}, {"Hat"}, {"Barn"}, | |||
| {"Tubing"}, {"Snorkeling"}, {"Cool"}, {"Cookware and bakeware"}, {"Cycling"}, | |||
| {"Swing (Seat)"}, {"Muscle"}, {"Cat"}, {"Skateboard"}, {"Star"}, | |||
| {"Toe"}, {"Junk"}, {"Bicycle"}, {"Bedroom"}, {"Person"}, | |||
| {"Sand"}, {"Canyon"}, {"Tie"}, {"Twig"}, {"Sphynx"}, | |||
| {"Supervillain"}, {"Nightclub"}, {"Ranch"}, {"Pattern"}, {"Shorts"}, | |||
| {"Himalayan"}, {"Wall"}, {"Leggings"}, {"Windsurfing"}, {"Deejay"}, | |||
| {"Dance"}, {"Van"}, {"Bento"}, {"Sleep"}, {"Wine"}, | |||
| {"Picnic"}, {"Leisure"}, {"Dune"}, {"Crowd"}, {"Kayak"}, | |||
| {"Ballroom"}, {"Selfie"}, {"Graduation"}, {"Frigate"}, {"Mountain"}, | |||
| {"Dude"}, {"Windshield"}, {"Skiff"}, {"Class"}, {"Scarf"}, | |||
| {"Bull"}, {"Soccer"}, {"Bag"}, {"Basset hound"}, {"Tractor"}, | |||
| {"Swimming"}, {"Running"}, {"Track"}, {"Helicopter"}, {"Pitch"}, | |||
| {"Clock"}, {"Song"}, {"Jersey"}, {"Stairs"}, {"Flap"}, | |||
| {"Jewellery"}, {"Bridge"}, {"Cuisine"}, {"Bread"}, {"Caving"}, | |||
| {"Shell"}, {"Wreath"}, {"Roof"}, {"Cookie"}, {"Canoe"}}; | |||
| "Herd", "Safari", "Bangle", "Cushion", "Countertop", | |||
| "Prom", "Branch", "Sports", "Sky", "Community", | |||
| "Wheel", "Cola", "Tuxedo", "Flowerpot", "Team", | |||
| "Computer", "Unicycle", "Brig", "Aerospace engineering", "Scuba diving", | |||
| "Goggles", "Fruit", "Badminton", "Horse", "Sunglasses", | |||
| "Fun", "Prairie", "Poster", "Flag", "Speedboat", | |||
| "Eyelash", "Veil", "Mobile phone", "Wheelbarrow", "Saucer", | |||
| "Leather", "Drawer", "Paper", "Pier", "Waterfowl", | |||
| "Tights", "Rickshaw", "Vegetable", "Handrail", "Ice", | |||
| "Metal", "Flower", "Wing", "Silverware", "Event", | |||
| "Skyline", "Money", "Comics", "Handbag", "Porcelain", | |||
| "Rodeo", "Curtain", "Tile", "Human mouth", "Army", | |||
| "Menu", "Boat", "Snowboarding", "Cairn terrier", "Net", | |||
| "Pasteles", "Cup", "Rugby", "Pho", "Cap", | |||
| "Human hair", "Surfing", "Loveseat", "Museum", "Shipwreck", | |||
| "Trunk (Tree)", "Plush", "Monochrome", "Volcano", "Rock", | |||
| "Pillow", "Presentation", "Nebula", "Subwoofer", "Lake", | |||
| "Sledding", "Bangs", "Tablecloth", "Necklace", "Swimwear", | |||
| "Standing", "Jeans", "Carnival", "Softball", "Centrepiece", | |||
| "Skateboarder", "Cake", "Dragon", "Aurora", "Skiing", | |||
| "Bathroom", "Dog", "Needlework", "Umbrella", "Church", | |||
| "Fire", "Piano", "Denim", "Bridle", "Cabinetry", | |||
| "Lipstick", "Ring", "Television", "Roller", "Seal", | |||
| "Concert", "Product", "News", "Fast food", "Horn (Animal)", | |||
| "Tattoo", "Bird", "Bridegroom", "Love", "Helmet", | |||
| "Dinosaur", "Icing", "Miniature", "Tire", "Toy", | |||
| "Icicle", "Jacket", "Coffee", "Mosque", "Rowing", | |||
| "Wetsuit", "Camping", "Underwater", "Christmas", "Gelato", | |||
| "Whiteboard", "Field", "Ragdoll", "Construction", "Lampshade", | |||
| "Palace", "Meal", "Factory", "Cage", "Clipper (Boat)", | |||
| "Gymnastics", "Turtle", "Human foot", "Marriage", "Web page", | |||
| "Human beard", "Fog", "Wool", "Cappuccino", "Lighthouse", | |||
| "Lego", "Sparkler", "Sari", "Model", "Temple", | |||
| "Beanie", "Building", "Waterfall", "Penguin", "Cave", | |||
| "Stadium", "Smile", "Human hand", "Park", "Desk", | |||
| "Shetland sheepdog", "Bar", "Eating", "Neon", "Dalmatian", | |||
| "Crocodile", "Wakeboarding", "Longboard", "Road", "Race", | |||
| "Kitchen", "Odometer", "Cliff", "Fiction", "School", | |||
| "Interaction", "Bullfighting", "Boxer", "Gown", "Aquarium", | |||
| "Superhero", "Pie", "Asphalt", "Surfboard", "Cheeseburger", | |||
| "Screenshot", "Supper", "Laugh", "Lunch", "Party ", | |||
| "Glacier", "Bench", "Grandparent", "Sink", "Pomacentridae", | |||
| "Blazer", "Brick", "Space", "Backpacking", "Stuffed toy", | |||
| "Sushi", "Glitter", "Bonfire", "Castle", "Marathon", | |||
| "Pizza", "Beach", "Human ear", "Racing", "Sitting", | |||
| "Iceberg", "Shelf", "Vehicle", "Pop music", "Playground", | |||
| "Clown", "Car", "Rein", "Fur", "Musician", | |||
| "Casino", "Baby", "Alcohol", "Strap", "Reef", | |||
| "Balloon", "Outerwear", "Cathedral", "Competition", "Joker", | |||
| "Blackboard", "Bunk bed", "Bear", "Moon", "Archery", | |||
| "Polo", "River", "Fishing", "Ferris wheel", "Mortarboard", | |||
| "Bracelet", "Flesh", "Statue", "Farm", "Desert", | |||
| "Chain", "Aircraft", "Textile", "Hot dog", "Knitting", | |||
| "Singer", "Juice", "Circus", "Chair", "Musical instrument", | |||
| "Room", "Crochet", "Sailboat", "Newspaper", "Santa claus", | |||
| "Swamp", "Skyscraper", "Skin", "Rocket", "Aviation", | |||
| "Airliner", "Garden", "Ruins", "Storm", "Glasses", | |||
| "Balance", "Nail (Body part)", "Rainbow", "Soil ", "Vacation ", | |||
| "Moustache", "Doily", "Food", "Bride ", "Cattle", | |||
| "Pocket", "Infrastructure", "Train", "Gerbil", "Fireworks", | |||
| "Pet", "Dam", "Crew", "Couch", "Bathing", | |||
| "Quilting", "Motorcycle", "Butterfly", "Sled", "Watercolor paint", | |||
| "Rafting", "Monument", "Lightning", "Sunset", "Bumper", | |||
| "Shoe", "Waterskiing", "Sneakers", "Tower", "Insect", | |||
| "Pool", "Placemat", "Airplane", "Plant", "Jungle", | |||
| "Armrest", "Duck", "Dress", "Tableware", "Petal", | |||
| "Bus", "Hanukkah", "Forest", "Hat", "Barn", | |||
| "Tubing", "Snorkeling", "Cool", "Cookware and bakeware", "Cycling", | |||
| "Swing (Seat)", "Muscle", "Cat", "Skateboard", "Star", | |||
| "Toe", "Junk", "Bicycle", "Bedroom", "Person", | |||
| "Sand", "Canyon", "Tie", "Twig", "Sphynx", | |||
| "Supervillain", "Nightclub", "Ranch", "Pattern", "Shorts", | |||
| "Himalayan", "Wall", "Leggings", "Windsurfing", "Deejay", | |||
| "Dance", "Van", "Bento", "Sleep", "Wine", | |||
| "Picnic", "Leisure", "Dune", "Crowd", "Kayak", | |||
| "Ballroom", "Selfie", "Graduation", "Frigate", "Mountain", | |||
| "Dude", "Windshield", "Skiff", "Class", "Scarf", | |||
| "Bull", "Soccer", "Bag", "Basset hound", "Tractor", | |||
| "Swimming", "Running", "Track", "Helicopter", "Pitch", | |||
| "Clock", "Song", "Jersey", "Stairs", "Flap", | |||
| "Jewellery", "Bridge", "Cuisine", "Bread", "Caving", | |||
| "Shell", "Wreath", "Roof", "Cookie", "Canoe"}; | |||
| static float g_thres_map[RET_CATEGORY_SUM] = { | |||
| 0.23, 0.03, 0.10, 0.13, 0.03, | |||
| @@ -60,7 +60,6 @@ public class AutoFitTextureView extends TextureView { | |||
| super.onMeasure(widthMeasureSpec, heightMeasureSpec); | |||
| int width = MeasureSpec.getSize(widthMeasureSpec); | |||
| int height = MeasureSpec.getSize(heightMeasureSpec); | |||
| Log.e("AAA","onMeasure height>>"+height); | |||
| if (0 == mRatioWidth || 0 == mRatioHeight) { | |||
| setMeasuredDimension(width, height); | |||
| @@ -362,7 +362,6 @@ public class CameraFragment extends Fragment { | |||
| @SuppressLint("MissingPermission") | |||
| private void openCamera(int width, int height) { | |||
| Log.e("AAA","height>>"+height); | |||
| setPreviewSize(width, height, streamConfigurationMap, largest); | |||
| configureTransform(width, height); | |||
| @@ -13,7 +13,6 @@ import androidx.appcompat.app.AppCompatActivity; | |||
| import androidx.core.app.ActivityCompat; | |||
| import com.mindspore.hiobject.objectdetect.CameraActivity; | |||
| import com.mindspore.hiobject.objectdetect.DealDataActivity; | |||
| import com.mindspore.hiobject.objectdetect.PhotoActivity; | |||
| public class SplashActivity extends AppCompatActivity implements View.OnClickListener { | |||
| @@ -21,7 +20,7 @@ public class SplashActivity extends AppCompatActivity implements View.OnClickLis | |||
| private static final int RC_CHOOSE_PHOTO = 1; | |||
| private static final int REQUEST_CAMERA_PERMISSION = 2; | |||
| private Button btnPhoto, btnCamera, btnDealData; | |||
| private Button btnPhoto, btnCamera; | |||
| @Override | |||
| protected void onCreate(Bundle savedInstanceState) { | |||
| @@ -30,12 +29,9 @@ public class SplashActivity extends AppCompatActivity implements View.OnClickLis | |||
| btnPhoto = findViewById(R.id.btn_photo); | |||
| btnCamera = findViewById(R.id.btn_camera); | |||
| btnDealData = findViewById(R.id.btn_deal); | |||
| btnDealData.setVisibility(View.GONE); | |||
| btnPhoto.setOnClickListener(this); | |||
| btnCamera.setOnClickListener(this); | |||
| btnDealData.setOnClickListener(this); | |||
| } | |||
| @@ -50,15 +46,11 @@ public class SplashActivity extends AppCompatActivity implements View.OnClickLis | |||
| ActivityCompat.requestPermissions(this, | |||
| new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE, | |||
| Manifest.permission.READ_PHONE_STATE, Manifest.permission.CAMERA}, REQUEST_CAMERA_PERMISSION); | |||
| } else if (R.id.btn_deal == view.getId()) { | |||
| Intent intent = new Intent(SplashActivity.this, DealDataActivity.class); | |||
| startActivity(intent); | |||
| } | |||
| } | |||
| /** | |||
| * 权限申请结果回调 | |||
| * Authority application result callback | |||
| */ | |||
| @Override | |||
| public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { | |||
| @@ -16,9 +16,6 @@ import android.provider.MediaStore; | |||
| import java.io.IOException; | |||
| public class ImageDegreeHelper { | |||
| /** | |||
| * 专为Android4.4及以上设计的从Uri获取文件绝对路径,以前的方法已不好使 | |||
| */ | |||
| @SuppressLint("NewApi") | |||
| public static String getPath(final Context context, final Uri uri) { | |||
| @@ -136,10 +133,10 @@ public class ImageDegreeHelper { | |||
| } | |||
| /** | |||
| * 读取照片旋转角度 | |||
| * Read photo rotation angle | |||
| * | |||
| * @param path 照片路径 | |||
| * @return 角度 | |||
| * @param path Photo path | |||
| * @return angle | |||
| */ | |||
| public static int readPictureDegree(String path) { | |||
| int degree = 0; | |||
| @@ -166,11 +163,11 @@ public class ImageDegreeHelper { | |||
| public static Bitmap rotaingImageView(int angle, Bitmap bitmap) { | |||
| Bitmap returnBm = null; | |||
| // 根据旋转角度,生成旋转矩阵 | |||
| // According to the rotation angle, the rotation matrix is generated | |||
| Matrix matrix = new Matrix(); | |||
| matrix.postRotate(angle); | |||
| try { | |||
| // 将原始图片按照旋转矩阵进行旋转,并得到新的图片 | |||
| // The original image is rotated according to the rotation matrix, and a new image is obtained | |||
| returnBm = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true); | |||
| } catch (OutOfMemoryError e) { | |||
| } | |||
| @@ -35,52 +35,50 @@ public class TrackingMobile { | |||
| } | |||
| /** | |||
| * jni加载模型 | |||
| * JNI loading model | |||
| * | |||
| * @param assetManager assetManager | |||
| * @param buffer buffer | |||
| * @param numThread numThread | |||
| * @return 加载模型数据 | |||
| * @return Load model data | |||
| */ | |||
| public native long loadModel(AssetManager assetManager, ByteBuffer buffer, int numThread); | |||
| /** | |||
| * jni运行模型 | |||
| * JNI run model | |||
| * | |||
| * @param netEnv 加载模型数据 | |||
| * @param img 当前图片 | |||
| * @return 运行模型数据 | |||
| * @param netEnv Load model data | |||
| * @param img Current picture | |||
| * @return Run model data | |||
| */ | |||
| public native String runNet(long netEnv, Bitmap img); | |||
| /** | |||
| * 解绑模型数据 | |||
| * Unbind model data | |||
| * | |||
| * @param netEnv 模型数据 | |||
| * @return 解绑状态 | |||
| * @param netEnv model data | |||
| * @return Unbound state | |||
| */ | |||
| public native boolean unloadModel(long netEnv); | |||
| /** | |||
| * C++侧封装成了MSNetWorks类的方法 | |||
| * C++ Methods encapsulated into the msnetworks class | |||
| * | |||
| * @param assetManager 模型文件位置 | |||
| * @return 加载模型文件状态 | |||
| * @param assetManager Model file location | |||
| * @return Loading model file status | |||
| */ | |||
| public boolean loadModelFromBuf(AssetManager assetManager) { | |||
| // String ModelPath = "model/model_hebing_3branch.ms"; | |||
| String ModelPath = "model/ssd.ms"; | |||
| ByteBuffer buffer = loadModelFile(ModelPath); | |||
| netEnv = loadModel(assetManager, buffer, 2); | |||
| return true; | |||
| } | |||
| /** | |||
| * 运行Mindspore | |||
| * Run Mindspore | |||
| * | |||
| * @param img 当前图片识别 | |||
| * @return 识别出来的文字信息 | |||
| * @param img Current image recognition | |||
| * @return Recognized text information | |||
| */ | |||
| public String MindSpore_runnet(Bitmap img) { | |||
| String ret_str = runNet(netEnv, img); | |||
| @@ -88,7 +86,7 @@ public class TrackingMobile { | |||
| } | |||
| /** | |||
| * 解绑模型 | |||
| * Unbound model | |||
| * @return true | |||
| */ | |||
| public boolean unloadModel() { | |||
| @@ -97,9 +95,9 @@ public class TrackingMobile { | |||
| } | |||
| /** | |||
| * 加载模型文件流 | |||
| * @param modelPath 模型文件路径 | |||
| * @return 加载模型文件流 | |||
| * Load model file stream | |||
| * @param modelPath Model file path | |||
| * @return Load model file stream | |||
| */ | |||
| public ByteBuffer loadModelFile(String modelPath) { | |||
| InputStream is = null; | |||
| @@ -8,9 +8,9 @@ import androidx.appcompat.app.AppCompatActivity; | |||
| import com.mindspore.hiobject.R; | |||
| /** | |||
| * [入口主页面] | |||
| * Main page of entrance | |||
| * | |||
| * 向JNI传入图片,测试MindSpore模型加载推理等. | |||
| * Pass in pictures to JNI, test mindspore model, load reasoning, etc | |||
| */ | |||
| public class CameraActivity extends AppCompatActivity { | |||
| @@ -25,7 +25,6 @@ public class CameraActivity extends AppCompatActivity { | |||
| setContentView(R.layout.activity_camera); | |||
| if (savedInstanceState != null && this.clearFragmentsTag()) { | |||
| // 重建时清除 fragment的状态 | |||
| savedInstanceState.remove(BUNDLE_FRAGMENTS_KEY); | |||
| } | |||
| @@ -37,7 +36,6 @@ public class CameraActivity extends AppCompatActivity { | |||
| protected void onSaveInstanceState(Bundle outState) { | |||
| super.onSaveInstanceState(outState); | |||
| if (outState != null && this.clearFragmentsTag()) { | |||
| // 销毁时不保存fragment的状态 | |||
| outState.remove(BUNDLE_FRAGMENTS_KEY); | |||
| } | |||
| } | |||
| @@ -1,260 +0,0 @@ | |||
| package com.mindspore.hiobject.objectdetect; | |||
| import android.Manifest; | |||
| import android.content.pm.PackageManager; | |||
| import android.graphics.Bitmap; | |||
| import android.graphics.BitmapFactory; | |||
| import android.os.Build; | |||
| import android.os.Bundle; | |||
| import android.os.Environment; | |||
| import android.os.Handler; | |||
| import android.os.Message; | |||
| import android.util.Log; | |||
| import android.widget.Toast; | |||
| import androidx.annotation.NonNull; | |||
| import androidx.appcompat.app.AppCompatActivity; | |||
| import com.mindspore.hiobject.R; | |||
| import com.mindspore.hiobject.help.TrackingMobile; | |||
| import java.io.File; | |||
| import java.io.FileNotFoundException; | |||
| import java.io.FileOutputStream; | |||
| import java.io.IOException; | |||
| import java.io.ObjectOutputStream; | |||
| import java.util.ArrayList; | |||
| import java.util.List; | |||
| /** | |||
| * [入口主页面] | |||
| * <p> | |||
| * 向JNI传入图片,测试MindSpore模型加载推理等. | |||
| */ | |||
| public class DealDataActivity extends AppCompatActivity { | |||
| private final String TAG = "DealDataActivity"; | |||
| //自行将v2017的图片放入手机sdcard的位置 | |||
| private final static String IMGPATH = "/sdcard/val2017"; | |||
| private final static String IMG_RESULT_PATH = "/sdcard/val2017result/result.txt"; | |||
| private final static String IMG_RESULT_SINGLE_PATH = "/sdcard/val2017result/result2.txt"; | |||
| private Bitmap mBitmap; | |||
| private TrackingMobile mTrackingMobile; | |||
| private static final String PERMISSION_READ_EXTERNAL_STORAGEA = Manifest.permission.READ_EXTERNAL_STORAGE; | |||
| private static final String PERMISSION_WRITE_EXTERNAL_STORAGEA = Manifest.permission.WRITE_EXTERNAL_STORAGE; | |||
| private static final int PERMISSIONS_REQUEST = 1; | |||
| private Handler handler = new Handler() { | |||
| @Override | |||
| public void handleMessage(@NonNull Message msg) { | |||
| super.handleMessage(msg); | |||
| if (1 == msg.what) { | |||
| dealData(); | |||
| } | |||
| } | |||
| }; | |||
| @Override | |||
| protected void onCreate(Bundle savedInstanceState) { | |||
| super.onCreate(savedInstanceState); | |||
| setContentView(R.layout.activity_dealdata); | |||
| try { | |||
| mTrackingMobile = new TrackingMobile(this); | |||
| } catch (FileNotFoundException e) { | |||
| Log.e(TAG, Log.getStackTraceString(e)); | |||
| } | |||
| mTrackingMobile.loadModelFromBuf(getAssets()); | |||
| if (hasPermission()) { | |||
| getImgFileList(); | |||
| } else { | |||
| requestPermission(); | |||
| } | |||
| } | |||
| private List<String> imgFileList; | |||
| private void getImgFileList() { | |||
| new Thread(new Runnable() { | |||
| @Override | |||
| public void run() { | |||
| imgFileList = getFilesAllName(IMGPATH); | |||
| Message message = new Message(); | |||
| message.what = 1; | |||
| handler.sendMessage(message); | |||
| } | |||
| }).start(); | |||
| } | |||
| List<String> dealList = new ArrayList<>(); | |||
| private void dealData() { | |||
| if (imgFileList != null && imgFileList.size() > 0) { | |||
| Log.d(TAG, "imgFileList size()>>" + imgFileList.size()); | |||
| for (int i = 0; i < imgFileList.size(); i++) { | |||
| Bitmap bitmap = BitmapFactory.decodeFile(imgFileList.get(i)).copy(Bitmap.Config.ARGB_8888, true); | |||
| String result = mTrackingMobile.MindSpore_runnet(bitmap); | |||
| String fileName = imgFileList.get(i).substring(imgFileList.get(i).lastIndexOf("/") + 1); | |||
| Log.d(TAG, "index>>>" + i + ">>" + fileName + ">>result" + result); | |||
| StringBuilder sb = new StringBuilder(); | |||
| sb.append(fileName).append("_").append(result); | |||
| dealList.add(sb.toString()); | |||
| } | |||
| Log.d(TAG, "dealList >>>" + dealList.size()); | |||
| writeListIntoSDcard(IMG_RESULT_PATH, dealList); | |||
| } | |||
| } | |||
| private void dealSingleData() { | |||
| String fileFullName = IMGPATH + "/error.jpg"; | |||
| Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.error).copy(Bitmap.Config.ARGB_8888, true); | |||
| if (bitmap != null) { | |||
| String result = mTrackingMobile.MindSpore_runnet(bitmap); | |||
| Log.d(TAG, ">>result" + result); | |||
| StringBuilder sb = new StringBuilder(); | |||
| sb.append("error.jpg").append("_").append(result); | |||
| } | |||
| } | |||
| public boolean writeListIntoSDcard(String fileName, List<String> list) { | |||
| if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { | |||
| File sdFile = new File(fileName); | |||
| try { | |||
| FileOutputStream fos = new FileOutputStream(sdFile); | |||
| ObjectOutputStream oos = new ObjectOutputStream(fos); | |||
| oos.writeObject(list);//写入 | |||
| fos.close(); | |||
| oos.close(); | |||
| return true; | |||
| } catch (FileNotFoundException e) { | |||
| // TODO Auto-generated catch block | |||
| e.printStackTrace(); | |||
| return false; | |||
| } catch (IOException e) { | |||
| // TODO Auto-generated catch block | |||
| e.printStackTrace(); | |||
| return false; | |||
| } | |||
| } else { | |||
| return false; | |||
| } | |||
| } | |||
| public boolean writeStringIntoSDcard(String fileName, String content) { | |||
| if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { | |||
| File sdFile = new File(fileName); | |||
| try { | |||
| FileOutputStream fos = new FileOutputStream(sdFile); | |||
| ObjectOutputStream oos = new ObjectOutputStream(fos); | |||
| oos.writeObject(content);//写入 | |||
| fos.close(); | |||
| oos.close(); | |||
| return true; | |||
| } catch (FileNotFoundException e) { | |||
| // TODO Auto-generated catch block | |||
| e.printStackTrace(); | |||
| return false; | |||
| } catch (IOException e) { | |||
| // TODO Auto-generated catch block | |||
| e.printStackTrace(); | |||
| return false; | |||
| } | |||
| } else { | |||
| return false; | |||
| } | |||
| } | |||
| @Override | |||
| public void onRequestPermissionsResult(final int requestCode, final String[] permissions, | |||
| final int[] grantResults) { | |||
| super.onRequestPermissionsResult(requestCode, permissions, grantResults); | |||
| if (requestCode == PERMISSIONS_REQUEST) { | |||
| if (allPermissionsGranted(grantResults)) { | |||
| getImgFileList(); | |||
| } else { | |||
| requestPermission(); | |||
| } | |||
| } | |||
| } | |||
| private static boolean allPermissionsGranted(final int[] grantResults) { | |||
| for (int result : grantResults) { | |||
| if (result != PackageManager.PERMISSION_GRANTED) { | |||
| return false; | |||
| } | |||
| } | |||
| return true; | |||
| } | |||
| private boolean hasPermission() { | |||
| if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { | |||
| return checkSelfPermission(PERMISSION_READ_EXTERNAL_STORAGEA) == PackageManager.PERMISSION_GRANTED && | |||
| checkSelfPermission(PERMISSION_WRITE_EXTERNAL_STORAGEA) == PackageManager.PERMISSION_GRANTED; | |||
| } else { | |||
| return true; | |||
| } | |||
| } | |||
| private void requestPermission() { | |||
| if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { | |||
| if (shouldShowRequestPermissionRationale(PERMISSION_READ_EXTERNAL_STORAGEA)) { | |||
| Toast.makeText(this, "Read permission is required for this demo", Toast.LENGTH_LONG) | |||
| .show(); | |||
| } | |||
| if (shouldShowRequestPermissionRationale(PERMISSION_WRITE_EXTERNAL_STORAGEA)) { | |||
| Toast.makeText(this, "WRITE permission is required for this demo", Toast.LENGTH_LONG) | |||
| .show(); | |||
| } | |||
| requestPermissions(new String[]{PERMISSION_READ_EXTERNAL_STORAGEA, PERMISSION_WRITE_EXTERNAL_STORAGEA}, PERMISSIONS_REQUEST); | |||
| } | |||
| } | |||
| public List<String> getFilesAllName(String path) { | |||
| //传入指定文件夹的路径 | |||
| File file = new File(path); | |||
| if (null == file || !file.isDirectory()) { | |||
| return null; | |||
| } | |||
| File[] files = file.listFiles(); | |||
| List<String> imagePaths = new ArrayList<>(); | |||
| for (int i = 0; i < files.length; i++) { | |||
| if (checkIsImageFile(files[i].getPath())) { | |||
| imagePaths.add(files[i].getPath()); | |||
| } | |||
| } | |||
| return imagePaths; | |||
| } | |||
| /** | |||
| * 判断是否是照片 | |||
| */ | |||
| public boolean checkIsImageFile(String fName) { | |||
| boolean isImageFile = false; | |||
| //获取拓展名 | |||
| String fileEnd = fName.substring(fName.lastIndexOf(".") + 1, | |||
| fName.length()).toLowerCase(); | |||
| if (fileEnd.equals("jpg") || fileEnd.equals("png") || fileEnd.equals("gif") | |||
| || fileEnd.equals("jpeg") || fileEnd.equals("bmp")) { | |||
| isImageFile = true; | |||
| } else { | |||
| isImageFile = false; | |||
| } | |||
| return isImageFile; | |||
| } | |||
| } | |||
| @@ -16,11 +16,10 @@ import java.util.ArrayList; | |||
| import java.util.List; | |||
| /** | |||
| * 针对物体检测的矩形框绘制类 | |||
| * <p> | |||
| * 使用的API: | |||
| * 1. Canvas:代表“依附”于指定View的画布,用它的方法来绘制各种图形. | |||
| * 2. Paint:代表Canvas上的画笔,用于设置画笔颜色、画笔粗细、填充风格等. | |||
| * Rectangle drawing class for object detection | |||
| * | |||
| * 1. Canvas:Represents the canvas attached to the specified view and uses its method to draw various graphics | |||
| * 2. Paint:Represents the brush on canvas and is used to set brush color, brush thickness, fill style, etc | |||
| */ | |||
| public class ObjectRectView extends View { | |||
| @@ -30,7 +29,7 @@ public class ObjectRectView extends View { | |||
| private List<RecognitionObjectBean> mRecognitions = new ArrayList<>(); | |||
| private Paint mPaint = null; | |||
| // 画框区域. | |||
| // Frame area | |||
| private RectF mObjRectF; | |||
| @@ -58,13 +57,13 @@ public class ObjectRectView extends View { | |||
| mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); | |||
| mPaint.setTextSize(50); | |||
| //只绘制图形轮廓(描边) | |||
| //Draw only outline (stroke) | |||
| mPaint.setStyle(Style.STROKE); | |||
| mPaint.setStrokeWidth(5); | |||
| } | |||
| /** | |||
| * 传入需绘制信息 | |||
| * Input information to be drawn | |||
| * | |||
| * @param recognitions | |||
| */ | |||
| @@ -74,13 +73,11 @@ public class ObjectRectView extends View { | |||
| mRecognitions.clear(); | |||
| mRecognitions.addAll(recognitions); | |||
| //重新draw(). | |||
| invalidate(); | |||
| } | |||
| public void clearCanvas(){ | |||
| mRecognitions.clear(); | |||
| //重新draw(). | |||
| invalidate(); | |||
| } | |||
| @@ -71,7 +71,7 @@ public class PhotoActivity extends AppCompatActivity { | |||
| String result = trackingMobile.MindSpore_runnet(bitmap); | |||
| long endTime = System.currentTimeMillis(); | |||
| Log.d(TAG, "RUNNET 耗时:"+(endTime-startTime)+"ms"); | |||
| Log.d(TAG, "RUNNET CONSUMING:"+(endTime-startTime)+"ms"); | |||
| Log.d(TAG, "result:"+ result); | |||
| recognitionObjectBeanList = getRecognitionList(result); | |||