# encoding:utf-8
import request
import base64
''''
车型识别
''''
request_url ="https://aip.baidubce.com/rest/2.0/image-classify/vl/ car"
# 二进制方式打开图片文件
f = open('[本地文件]','rb')
img = base64.b64encode(f.read())
params = {"image":img, "top num":5}
access_token = '[调用鉴权接口获取的 token]'
request_url = request_url + "?access token=" + access_token
headers = ('content-type': 'application/x-www-form-urlencoded' }
response = requests.post(request_url, data=params, headers=headers)
if response:
print (response.json())
返回的JSON 数据:
{
"log id": 4086212218842203806,
"location result": {
"width": 447,"top":226,"height": 209,"left":188
},
"result": [{
"baike info":{
"baike url":"http://baike.baidu.com/item/8E58B88838E588A8A08E88BF8AAChiron/20419512",
"description": "布加迪Chiron是法国跑车品牌布加迪出品的豪华超跑车。配置四涡轮增压发动机,420公里每小时,有23种颜色的选择,售价高达260万美元。”
},
"score": 0.98793351650238,
"name":"布加迪Chiron",
"year":"无年份信息"
},
{
"score":0.0021970034576952,
"name":“奥迪 RS5",
"year":"2011-2017"
},
"score":0.0021096928976476,
"name":"奥迪RS4",
"year":"无年份信息"
},
{
"score":0.0015581247862428,
"name":"奥迪 RS7",
"year":"2014-2016"
},
{
"score":0.00082337751518935,
"name":"布加迪威航",
"year":"2004-2015"}],
"color_result":"颜色无法识别"
}
# news.js
let Mock = require('mockjs');
let Random = Mock.Random;
module.exports = function() {
var data = {
news:[]
};
var images = [1,2,3].map(x => Random.image('200x100',Random.color(),Random.word(2,6)));
for (var i = 0; i < 100; i++) {
var content = Random.cparagraph(0,10);
data.news.push({
id:i,
title : Random.cword(8,20),
desc : content.substr(0,40),
tag : Random.cword(2,6),
views : Random.integer(100,5000),
images : images.slice(0,Random.integer(1,3))
})
}
return data
}
import UIKit
import Foundation
if let url =URL(string:"http://localhost:3004/news") {
URLSession.shared.dataTask(with:url) { (data,response,error) in if error != nil {
print("Network errors")
}
else {
let rs= String(data: data!,encoding: String.Encoding.utf8)!
print(rs)
if let json = try? JSONSerialization.jsonObject(with: data!, options:.allowFragments) {
print(json)
}
}
.resume()
}
func sessionGetData(){
let urlString = "http://www.tuling123.com/"
let url = URL(stringurlString)
let request = URLRequest(url:url!)
let session = URLSession.shared
let dataTask = session.dataTask(with:request,completionHandler: ((data, response, error) -> Void in if error ! = nil{
print(error.debugDescription)
}
else{
let str = String(data: data!,encoding:String.Encoding.utf8)
print(str!)
}
}) as URLSessionTask
dataTask.resume()
}
func sessionDownloadImage() {
let url = URL(string: "http://hangge.com/blog/images/logo.png”)
//请求
let request = URLRequest(url: url!)
let session = URLSession.shared
//下载任务
let downloadTask = session.downloadTask(with: request,
completionHandler:{
(location:URL?,response:URLResponse?,error:Error?)
->Void in
//输出下载文件原来的存放目录
print("location:\(String(describing: location))")
//location位置转换
let locationPath = location?.path
//获取当前时间
let now = NSDate()
//当前时间的时间戳
let timeInterval:TimeInterval = now.timeIntervalsince1970
let timeStamp = String(timeInterval)
//拷贝到用户目录
let documents:String = NSHomeDirectory() + "/Documents/\(timeStamp).png"
//创建文件管理器
let fileManager = FileManager.default
try! fileManager.moveItem(atPath: locationPath!, toPath:documents)
print("new location:\(documents)")
})
//使用resume方法启动任务
downloadTask.resume()
}
<?php
/** php 接收流文件
* @param String$file 接收后保存的文件名
* @return boolean
*/
function receiveStreamFile($receiveFile){
$streamData = isset($GLOBALS['HTTP RAW POST DATA'])? $GLOBALS['HTTP_RAW_POST_DATA'] :'';
if(empty($streamData)) {
$streamData = file_get_contents('php://input');
}
if($streamData!='') {
$ret = file_put_contents($receiveFile, $streamData, true);
}else{
$ret = false;
}
return $ret;
}
//定义服务器存储路径和文件名
$receiveFile = $ SERVER["DOCUMENT ROOT"]."/uploadFiles/swift.png";
echo $receiveFile;
$ret= receiveStreamFile($receiveFile);
echo json encode(array('success'=>(bool)$ret));
?>
func sessionUploadPhp(){
//上传地址
let url = URL(string: "http:
let session = URLSession.shared
var request = URLRequest(url: url!,cachePolicy:.reloadIgnoringCacheData)
request.httpMethod = "POST"
let fileImage = Bundle.main.path(forResource: "beel", ofType: "png")
let imgData = try! Data(contentsOf: URL(fileURLWithPath:fileImage!))
let uploadTask = session.uploadTask(with: request as URLRequest, from:imgData) {
(data:Data?, response:URLResponse?, error:Error?) -> Void in
if error != nil {
print(error!)
}else{
let str = String(data: data!, encoding: String.Encoding.utf8)
print("上传完毕:\(String(describing:str))")
}
}
uploadTask.resume()
}
import UIKit
import Foundation
let API_Key = "EIpA1hdD7i5152EsiNqpUOF"
let Secret_Key = "p8EZWg4agjDOxABmKvBYSNyZ1YzGFqb_"
let token_host = "https://aip.baidubce.com/oauth/2.0/token?grant pemclient_credentials&client_id=\(API_Key) &client_secret=\ (Secret Key)"
var access_token =""
var expires_in :Int32 = 0
if let url = URL(string: token host) {
RLSession.shared.dataTask(with: url) { (data,response,error) in
if error != nil {
print ("network error")
else {
if let json mtry? JSONSerialization.jsonObject(with: data!,options:.allowFragments) as? [String :Any] {
access_token = json["access token"] as! String
expires_in = json["expires in"] as! Int32
print("--------access_token------")
print(access_token)
print("--------expires time------")
print(expires in)
}
}
}
.resume ()
}
else {
print("url error")
}
public struct Loader{
static func readTxt(file url:URL) -> String? {
do {
let source = try String(contentsOf: url)
return source
}
catch {
return nil
}
static func readBin(file url:URL) -> Data? {
do {
let data = try Data(contentsOf: url)
return data
}
catch {
return nil
}
}
}
}
let path = Bundle.main.path(forResource:"qrcar.jpg", ofType: nil)
let url = URL(fileURLWithPath: path!)
let data = Loader.readBin(file: url)
if(data == nil) {
print("File failed to load")
}
let data_base64_str = data?.base64Encodedstring()
let data_base64 = data?.base64EncodedData()
access_token = "24.2ec96a68f74a8429b0f07869929413ae25920001598921312.282335-21737249"
let carType_host = "https://aip.baidubce.com/rest/2.0/image-classify/v1/ car" + "?access token=" + "\(access_token)"
if let url = URL(string: carType_host) {
var request = URLRequest(url:url)
request.setValue("application/x-www-form-urlencoded",forHTTPHeaderField:"Content-Type")
request.httpMethod = "POST"
let csmNSCharacterSet(charactersIn:"/=+号").inverted
let image_urlEncode = data base64 str!.addingPercentEncoding(withAllowedCharacters:cs)
let postString ="image=\(image urlEncode!)&top num=5&baike num-1"
request.httpBody = postString.data(using: .utf8)
URLSession.shared.dataTask(with:request){ (data,response,error)in if error != nil {
print("error")
}
else {
let rs = String(data: data!,encoding:String.Encoding.utf8) print(rs!)
}
}
.resume()
}
{
"log id": 4368540366187197442,
"location result":
{
"width": 386.4585876464844,
"top":81.3405532836914,
"height":183.9795532226562,
"left":58.03330230712891
},
"result":
[
{
"score":0.9767324924468994,
"year":"2014-2017",
"baike_info":
{
"baike_url": "/item/%E5%A5%87%E7%91%9EE5/4714",
"image_url":
"/pic/5882b2b7d0a20cf47a91d7777c094b36acaf9910",
"description":
"2014 款奇瑞 E5 是国内科技家轿的引领者,带领消费者悦享领先科技。"},
"name":"奇瑞E5"
},
{
"score":0.007103727199137211,
"name":"奇瑞旗云",
"year":"2010-2013"
},
{
"score":0.003686367534101009,
"name":"奇瑞艾瑞泽 7",
"year":"2016-2017"
},
{
"score":0.001757977530360222,
"name":"奇瑞E3",
"year":"2015-2017"
},
{
"score":0.001047104829922318,
"name":"奇瑞A5",
"year":"2015"
}
],
"color result":"黑色"
}
import UIKit
class ViewController: UIViewController ,UINavigationControllerDelegate,UIImagePickerControllerDelegate {
@IBOutlet weak var carImageView: UIImageView!
@IBAction func onLibrary(_ sender: UIButton) {
let vc = UIImagePickerController()
vc.sourceType = .photoLibrary
vc.allowsEditing = true
vc.delegate = self
present(vc, animated: true)
@IBAction func onCamera(_ sender: UIButton) {
let vc = UIImagePickerController()
vc.sourceType = .camera
vc.allowsEditing = true
vc.delegate = self present(vc, animated: true)
}
func imagePickerController(_ picker: UIImagePickerController,didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey: Any]) {
picker.dismiss(animated: true)
guard let image = info[.editedImage] as? UIImage
else {
return
}
carImageView.image = image
}
}
import UIKit
class ViewController: UIViewController ,UINavigationControllerDelegate,UIImagePickerControllerDelegate{
@IBOutlet weak var carImageView: UIImageview!
@IBOutlet weak var carName: UILabel!
@IBOutlet weak var carDetails: UILabel!
@IBAction func onLibrary(_sender; UIButton) {
let vc = UIImagePickerController()
vc.sourceType = .photoLibrary
vc.allowsEditing = true
vc.delegate = self
present(vc, animated: true)
@IBAction func onCamera( sender: UIButton) {
let vc = UIImagePickerController()
vc.sourceType = .camera
vc.allowsEditing = true
vc.delegate = self
present(vc, animated: true)
uncimagepickerController(_ picker: UIImagePickerController, dFinishPickingMediaWithInfo info:[UIImagePickerController.InfoKey :Any]) {
picker.dismiss(animated: true)
guard let image = info[.editedImage] as? UIImage
else {
return
}
carImageView.image = image
let access_token = get baidu token()
if access token == "" {
return
}
else {
get_car_type(access_token: access_token)
}
func get_car type(access token; String) {
let image = carImageView.image
guard let data = image!.jpegData(compressionQuality: 0.5)
else {
return
}
let data_base64_str = data.base64Encodedstring()
let carType host = "https://aip.baidubce.com/rest/2.0/image-classify/vl/car" + "?access token=" + "\(access token)"
if let url = URL(string: carType host) {
var request = URLRequest(url:url)
request.setValue("application/x-www-form-urlencoded",forHTTPHeaderField:"Content-Type")
request.httpMethod = "POST"
let cs = NSCharacterSet(charactersIn: "/=+%").inverted
let image_urlEncode = data _base64_str.addingPercentEncoding(withAllowedCharacters: cs
let postString = "image=\(image_urlEncode!) &top_num=5&baike num=l"
request.httpBody = postString.data(using: utf)
URLSession.shared.dataTask(with; request){ (data,response, error) in
if error != nil {
print("error")
}
else {
if let json = try? JSONSerialization,jsonObject(with:data!, options: .allowFragments) as? [String : Any]
let result = json("result"l as! Array<Dictionary<Any>>
let name = result[0]["name"] as! String
var description = "非车类"
if name != "非车类" {
let baike_info = result[0]["baike info") as! Dictionary<String,String>
if let details = baike info["description"] {
description = details
}
else{
description = "百度百科无此车资料"
}
DispatchQueue.main.async {
self.carDetails.textm = description
self.carNametext = name
}
}
}
}
.resume()
}
}
func get_baidu_token()-> String {
let API_Key = "EIpAlhdD7i5152EsiNqpU0F1"
let Secret_Key = "p8EZWg4agjDOxABmKvBYSNyZ1YzGFgbm"
let token_host="https://aip.baidubce.com/oauth/2.0/token?grant_ient_credentialssclient_id-\(API_Key)&client_secret-\(Secret Key)"
var access token=""
let semaphore: DispatchSemaphore = DispatchSemaphore(value:0)
if let url= URListring:token host) {
URLSession.shared.dataTask(with; url) { (data, response, error) in
if error != nil {
print("network error")
}
else {
if let json = try? JSONSerializationjsonObject(with:data!,options:allowFragments)as? [String :Any] {
access_token = json["access_token"l as! String
}
semaphore.signal()
}
.resume()
}
else {
print("url error")
}
semaphore.wait()
return access_token
}
}