第6
/*
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
}
*/
/*
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
}
}
*/完结撒花!!!!