编辑代码

第6
/*
# encoding:utf-8
import requestsimport base64.--
车型识别
..-request url ="https://aip.baidubce.com/rest/2.0/image-classify/v1/caru
# 二进制方式打开图片文件
f=open('[本地文件]','rb')img = base64.b64encode(f.read())

params ={"image":img,"top num":5)
access token =[ 调用鉴权接口获取的 token]!
request url = request url + "?access token=" + access tokenheaders ={'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
}
"resultr: [(
    "baike info":{
        "baike url":"http://baike.baidu.com/item/E5B8%8358AA0%E8号BF号AACh:
ron/20419512""description":布加迪 Chiron 是法国跑车品牌布加迪出品的豪华超跑车。配置四涡轩增压发动机,420 公里每小时,有 23 种颜色的选择,售价高达 260 万美元。"
},
"score": 0.98793351650238"name":“布加迪 Chiron""year":"无年份信息“
},
{
    "score": 0.0021970034576952"name":"奥迪RS5","year":"2011-2017"),

}
"score": 0.0021096928976476,
*/
/*
{
    "coord":("lon":-0.13,"lat":51.51)1
    "weather":[f"id":300,"main":;"Drizzle","description";"lightintensity drizzle","icon":"09d"}],
    "base":"stations",
    "mainn:(
        "temp":280.32,
        "pressure":1012,
        "humidityu:81,
        "temp_min":279.15,
        "temp_max";281.15

},
"visibility":10000,
"wind":{
    "speed":4.1,
    "deg":80]
    "clouds":{
        "all":90),
        "dt":1485789600,
        "sys":(
            "type":1,wid":5091,
            "message":0.0103
            ,"country";"GB""sunrise":1485762037,
            "sunset":1485794875
            },
            "id":2643743,"name":"London""cod":200
            }

            */
            /*
            # news.jslet 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 (vari=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!,ptions: .allowFragments){
                print(json)
            }
            }
            }
            }
            .resume()
}
*/
/*
func sessionGetData(){
    let urlString ="http://www.tuling123.com/n"
    let url = URL(string:urlString)
    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.timeIntervalSincel9let 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)")})
downloadTask.resume()
}
*/
/*
<?php/** php 接收流文件
* @param StringSfile 接收后保存的文件名* @return boolean
*/
function receiveStreamFile($receiveFile)(SstreamData = isset(SGLOBALS[HTTP_RA_OST DATA'])?_SGLOBALS['HTTPRAW_POST_DATA'] :;
if(empty(sstreamData))(
    $streamData = file get contents('php://input');
    }
    if(SstreamData!=' ){
        $ret = file put contents($receiveFile$streamData, true);
        }else{
            $ret = false;
        }
return $ret;
}
SreceiveFile = S 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://localhost/uploadSwift.php")//1.创建会话对象
let session = URLSession.shared
//请求var request = URIRequest(url: url!, cachePolicy: .reloadIgnoringCacheData)request.httpMethod = "POST// 上传数据流
let fileImage = Bundle.main.path(forResource: "beel", ofType: "png")let imgData = try! Data(contentsof: URL(fileURIWithPath: fileImage!))
let uploadTask = session.uploadTask(with: request as URLRequest, from(data;Data?, response:URLResponse?,error:Error?) -> Void in// 上传完毕后if error != nil{print(error!)Jelse(
imgData) [
    let str = String(data: data!,encoding: String.Encoding.utf8)print("上传完毕:\(String(describing: str))")
    }
    }
    uploadTask.resume()
}
import UIKitimport Foundation
letAPI_Key="EIpAlhdD7i5152EsiNqpUOFlet_Secret_Key="p8EZWq4agjDOxABmKvBYSNy21YzGFqb
_"
let token host ="https://aip.baidubce.com/oauth/2.0/token?granttype=client_credentials&client_id=\(API Key)&client_secret=\(Secret Key)"
var access token = uuvar expires in :Int32 = 0
if let url = URL(string: token host) (URISession.shared.dataTask(with; url) ( (data, response, error) inif error != nil{
print("network error")}
else (
if let json = try? JSONSerialization.jsonObject(with: data!,
options: .allowFragments) as? [String : Any] [(
access token = json["access token"] as! String
expires in = json["expires in"] as! Int32print("--------access token------")
print(access token)
print("--------expires time------")
print(expires in)
}
}
}
.resume()
}
else {
print("url error")
}
    //以文本或者二进制方式读入源程序文件的 Loader
public struct Loader {
static func readTxt(file url;URI) -> String? (
do f
let source = try String(contentsOf: url)
return source}
catch {
return nil}
}
static func readBin(file url:URL) -> Data? {dof
let data = try Data(contentsof: url)
return data
}
    catch {
return nil
}
}
}
let path = Bundle.main.path(forResource: "qrcar.jpg", ofType: nil)
let url = URL(fileURIwithPath: 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.2ec96a68f74a8429b0f07869929413ae.2592000.1598921312.282335-21737249"
"https://aip.baidubce.com/rest/2.0/image-classify/vllet carType host =car"+"?access token=n + "\(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 ="POSTu
let cs = NSCharacterSet(charactersIn:"/=+").inverted
let image urlEncode = data_base64_str!.addingPercentEncoding(withAllowedCharacters: cs)let postString ="image=\(image_urlEncode!)&top num=5sbaike_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";“/1tem/%E5%A5%87%E7%91号9EE5/475143”
"image url":
"/pic/5882b2b7d0a20cE47a91d7777c094b36acaf9910",
"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!//设置Action,由相册按钮事件触发
@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: UIImagePickerControllerrdidFinishPickingMediaWithInfo info: [UIIagePickerController.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{
//设置图像显示用的 Outlet,就是变量 carImageView
@IBOutlet weak var carImageView: UIImageView!
//显示识别出来的车辆名称型号
@IBOutlet weak var carName: UILabel!
// 显示该车辆百度百科里面的简介
@IBOutlet weak var carDetails: UILabel!
//设置 Action,由相册按钮事件触发
@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 = .cameravc.allowsEditing = truevc.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 中carImageView.image = image
    let access token = get baidu token()if access_token == un {
return}
else (
//从百度 AI 获得车型信息get_car_type(access token: access_token)
}
}
func get car type(access_token: String) (// 获取显示的图片,并保存为 jpg 格式
let image = carImageView.image
//let data = UIImagePNGRepresentation(image)
guard let data = image!.jpegData(compressionQuality: 0.5) else (
return
}
let data base64 str = data.base64EncodedString()
//准备好获取车型的API的URL的字符串
let carType_host = "https://aip.baidubce.com/rest/2.0/image-classify/v1/car" +"?access token=”+ (access token)"//从字符串转换为URL
if let url = URL(string: carType host) {
//从URL生成URLRequest
var request = URLRequest(url: url)
request.setValue("application/x-www-fom-urlencoded", forHTTPHeaderField:
"Content-Type")
request.httpMethod ="POST"//将图片文件进行urlencode 转码
let cs = NSCharacterSet(charactersIn: “/=+%").invertedlet image urlEncode = data base64 str.addingPercentEncoding(withAllowedCharacters: cs)//合并三个参数为一个字符串
let postString = "image=\(image urlEncode!)&top num-5sbaike num-"//将字符串转为 UTE8类型的数据
request.httpBody = poststring.data(using: .utf8)
//URLSession 调用URLSession.shared.dataTask(with: request)( (data, response,error) in
iferror !=nil {
    print("error")
}
else {
    if let json = try? JSONSerialization.jsonobject(with:data!, options: .allowFragments) as? [String : Any] (let result = json["result"] as! Array<Dictionary<
String,Any>>
let name = result[0]["name"] as! Stringvar 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.text = descriptionself.carName.text = name
}
}
}
}
.resume()

}
}
func get baidu token()->String {
let API Key="EIpAlhdD7i5152EsiNqpUOF1"
let Secret Key ="p8EZWg4agjDOxABmKvBYSNyZ1YzGFqbm"let token host = "https://aip.baidubce.com/oauth/2.0/token?granttype=client_credentials&client_id=(API_Key)&client secret=\(Secret Key)"
var access token = wn// 设置信号量
let semaphore: DispatchSemaphore = DispatchSemaphore(value: 0)
if let url = URL(string: token host) {URLSession.shared.dataTask(with: url) ( (data, response, error) inif error != nil (
    print("network error")
    }
    else {if let json = try? JSONSerialization.jsonObject(with:data!, options: .allowFragments) as? [String : Any] (access token = json["access token"] as! String
    }
    }
    semaphore.signal()
    }
        .resume()
        }
        else (
print("url error")
}
semaphore.wait()
return access_token
}
}
*/完结撒花!!!!