Commit 639dbf43 authored by CZ1004's avatar CZ1004

删除多余文件

parent 8f146b22
//
// HomeViewModel.swift
// PhoneManager
//
// Created by edy on 2025/4/7.
//
import Foundation
import Photos
class HomeViewModel {
// 所有图片,包括相片和截图
var allImages : [PHAsset] = []
// 只包含相片
var images : [PHAsset] = []
// 只包含视频
var videos : [PHAsset] = []
// 只包含截屏
var screenshots : [PHAsset] = []
/// 获取图片资源
/// - Parameter completion: 回调
func fetchMediaFromAlbum(completion: @escaping () -> Void){
let options = PHFetchOptions()
options.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: true)]
let allAssets = PHAsset.fetchAssets(with: options)
allAssets.enumerateObjects { (asset, _, _) in
let mediaSubType = asset.mediaSubtypes
let mediaType = asset.mediaType
if mediaType == .image {
if mediaSubType == .photoScreenshot{
self.screenshots.append(asset)
}else{
self.images.append(asset)
}
self.allImages.append(asset)
} else if mediaType == .video {
self.videos.append(asset)
}
}
completion()
}
/// 计算文件大小
/// - Parameters:
/// - assets: 当前资源
/// - completion: 回调
func calculateTotalSizeOfAssets(completion: @escaping (Int64) -> Void) {
var totalSize: Int64 = 0
let group = DispatchGroup()
var allAssets : [PHAsset] = []
allAssets = allAssets + self.allImages + self.videos
for asset in allAssets {
group.enter()
let resources = PHAssetResource.assetResources(for: asset)
for resource in resources {
PHAssetResourceManager.default().requestData(for: resource, options: nil) { (data) in
totalSize += Int64(data.count)
} completionHandler: { (error) in
Print("获取文件大小出错了")
}
group.leave()
}
}
group.notify(queue:.main) {
DispatchQueue.main.async {
completion(totalSize)
}
}
}
/// 计算文件数量
/// - Returns: 数量
func calculateTotalCount()->Int{
// 图片加文字
return self.allImages.count + self.videos.count
}
// 计算
func calGroupSimilarAssets(from assets: [PHAsset]) -> [[PHAsset]] {
var assetFeatures: [(PHAsset, cv::Mat)] = []
var similarGroups: [[PHAsset]] = []
// 遍历所有资产,提取特征
for i in 0..<assets.count {
let asset = assets.object(at: i)
let manager = PHImageManager.default()
let targetSize = CGSize(width: 200, height: 200)
manager.requestImage(for: asset, targetSize: targetSize, contentMode: .aspectFit, options: nil) { (image, _) in
if let image = image {
let cvImage = CIImage(cgImage: image.cgImage!)
let mat = cv::Mat(cvImage)
let grayMat = mat.cvtColor(cv::COLOR_BGR2GRAY)
let descriptor = cv::ORB.create()
var keypoints = [cv::KeyPoint]()
var descriptors = cv::Mat()
descriptor.detectAndCompute(grayMat, cv::Mat(), &keypoints, &descriptors)
assetFeatures.append((asset, descriptors))
if assetFeatures.count == assets.count {
// 所有资产的特征都已提取完成,开始比较
var visited = Set<Int>()
for j in 0..<assetFeatures.count {
if visited.contains(j) {
continue
}
var group: [PHAsset] = [assetFeatures[j].0]
visited.insert(j)
for k in (j + 1)..<assetFeatures.count {
if visited.contains(k) {
continue
}
let matcher = cv::BFMatcher(cv::NORM_HAMMING, crossCheck: true)
var matches = [cv::DMatch]()
matcher.match(assetFeatures[j].1, assetFeatures[k].1, &matches)
if matches.count > 10 { // 可以根据实际情况调整匹配数量的阈值
group.append(assetFeatures[k].0)
visited.insert(k)
}
}
if group.count > 1 {
similarGroups.append(group)
}
}
completion(similarGroups)
}
}
}
}
}
// 分别计算图片相似度
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment