[Funland] Các cụ IT (Dev) giúp e với ạ! E cần lấy tọa độ gps của 1 folder nhiều ảnh.

rgbhis

Xe điện
Biển số
OF-26681
Ngày cấp bằng
31/12/08
Số km
2,031
Động cơ
508,218 Mã lực
E cần một cái tool, quét tất cả ảnh trong 1 folder để lấy Long, Lat (tọa độ gps) của ảnh. Đầu ra là file excel, đại khái có 3 cột: tên file, Long, Lat.
E gà mờ món code. Có công cụ AI nào có thể làm được ko các cụ ơi, tức là mô tả yêu cầu, thì cái AI nó tạo thành tool.exe cho e sử dụng.
 

acac

Xe tải
Biển số
OF-465729
Ngày cấp bằng
27/10/16
Số km
454
Động cơ
305,784 Mã lực
e mới hỏi AI giúp cụ, cụ thử xem chứ e chưa thử :D

using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using OfficeOpenXml;
using MetadataExtractor;
using MetadataExtractor.Formats.Exif;

class Program
{
static void Main(string[] args)
{
string folderPath = @"C:\Your\Photo\Folder";
string excelPath = @"C:\Your\Output\Coordinates.xlsx";

List<PhotoCoordinates> photoCoordinatesList = new List<PhotoCoordinates>();

foreach (string file in Directory.GetFiles(folderPath, "*.jpg"))
{
var coordinates = GetCoordinates(file);
if (coordinates != null)
{
photoCoordinatesList.Add(new PhotoCoordinates
{
FileName = Path.GetFileName(file),
Latitude = coordinates.Value.latitude,
Longitude = coordinates.Value.longitude
});
}
}

ExportToExcel(photoCoordinatesList, excelPath);
}

static (double latitude, double longitude)? GetCoordinates(string filePath)
{
try
{
var directories = ImageMetadataReader.ReadMetadata(filePath);
var gpsDirectory = directories.OfType<GpsDirectory>().FirstOrDefault();

if (gpsDirectory != null)
{
var location = gpsDirectory.GetGeoLocation();
if (location != null)
{
return (location.Latitude, location.Longitude);
}
}
}
catch (Exception ex)
{
Console.WriteLine($"Error reading coordinates from {filePath}: {ex.ToString()}");
}

return null;
}

static void ExportToExcel(List<PhotoCoordinates> photoCoordinates, string excelPath)
{
using (ExcelPackage package = new ExcelPackage())
{
ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("Coordinates");
worksheet.Cells[1, 1].Value = "File Name";
worksheet.Cells[1, 2].Value = "Latitude";
worksheet.Cells[1, 3].Value = "Longitude";

for (int i = 0; i < photoCoordinates.Count; i++)
{
worksheet.Cells[i + 2, 1].Value = photoCoordinates.FileName;
worksheet.Cells[i + 2, 2].Value = photoCoordinates.Latitude;
worksheet.Cells[i + 2, 3].Value = photoCoordinates.Longitude;
}

FileInfo fileInfo = new FileInfo(excelPath);
package.SaveAs(fileInfo);
}
}
}

class PhotoCoordinates
{
public string FileName { get; set; }
public double Latitude { get; set; }
public double Longitude { get; set; }
}
 

rgbhis

Xe điện
Biển số
OF-26681
Ngày cấp bằng
31/12/08
Số km
2,031
Động cơ
508,218 Mã lực
e mới hỏi AI giúp cụ, cụ thử xem chứ e chưa thử :D

using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using OfficeOpenXml;
using MetadataExtractor;
using MetadataExtractor.Formats.Exif;

class Program
{
static void Main(string[] args)
{
string folderPath = @"C:\Your\Photo\Folder";
string excelPath = @"C:\Your\Output\Coordinates.xlsx";

List<PhotoCoordinates> photoCoordinatesList = new List<PhotoCoordinates>();

foreach (string file in Directory.GetFiles(folderPath, "*.jpg"))
{
var coordinates = GetCoordinates(file);
if (coordinates != null)
{
photoCoordinatesList.Add(new PhotoCoordinates
{
FileName = Path.GetFileName(file),
Latitude = coordinates.Value.latitude,
Longitude = coordinates.Value.longitude
});
}
}

ExportToExcel(photoCoordinatesList, excelPath);
}

static (double latitude, double longitude)? GetCoordinates(string filePath)
{
try
{
var directories = ImageMetadataReader.ReadMetadata(filePath);
var gpsDirectory = directories.OfType<GpsDirectory>().FirstOrDefault();

if (gpsDirectory != null)
{
var location = gpsDirectory.GetGeoLocation();
if (location != null)
{
return (location.Latitude, location.Longitude);
}
}
}
catch (Exception ex)
{
Console.WriteLine($"Error reading coordinates from {filePath}: {ex.ToString()}");
}

return null;
}

static void ExportToExcel(List<PhotoCoordinates> photoCoordinates, string excelPath)
{
using (ExcelPackage package = new ExcelPackage())
{
ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("Coordinates");
worksheet.Cells[1, 1].Value = "File Name";
worksheet.Cells[1, 2].Value = "Latitude";
worksheet.Cells[1, 3].Value = "Longitude";

for (int i = 0; i < photoCoordinates.Count; i++)
{
worksheet.Cells[i + 2, 1].Value = photoCoordinates.FileName;
worksheet.Cells[i + 2, 2].Value = photoCoordinates.Latitude;
worksheet.Cells[i + 2, 3].Value = photoCoordinates.Longitude;
}

FileInfo fileInfo = new FileInfo(excelPath);
package.SaveAs(fileInfo);
}
}
}

class PhotoCoordinates
{
public string FileName { get; set; }
public double Latitude { get; set; }
public double Longitude { get; set; }
}
Cảm ơn cụ! Cơ mà e đọc ko hiểu được. Nên đang hy vọng là có cái AI nào đó nó làm thành tool.exe cho e ăn sẵn luôn :)
 

xuandai

Xe buýt
Biển số
OF-38795
Ngày cấp bằng
21/6/09
Số km
799
Động cơ
179,527 Mã lực
Nơi ở
Ha Noi
Cụ cho cái file cụ đang có lên cho các bên hình dung
 

rgbhis

Xe điện
Biển số
OF-26681
Ngày cấp bằng
31/12/08
Số km
2,031
Động cơ
508,218 Mã lực
Cụ cho cái file cụ đang có lên cho các bên hình dung
Nó chỉ là cái ảnh chụp thôi mà cụ. Khi chụp mà có 4g, thì nó sẽ tự động gắn tọa độ vào metadata file ảnh đó. Giờ e cần 1 tool để lấy đc tọa độ của hàng loạt ảnh ghi ra xó.
 

hoangminh1992

[Tịch thu bằng lái]
Biển số
OF-860820
Ngày cấp bằng
6/6/24
Số km
385
Động cơ
5,747 Mã lực
Tuổi
34
Liên quan đến tình ái hay kinh doanh mà gấp gáp vậy cụ. Người chụp mà cài đặt GPS hidden thì cụ cũng bó tay thôi
 

xedieu

Xe cút kít
Biển số
OF-24289
Ngày cấp bằng
17/11/08
Số km
18,136
Động cơ
490,487 Mã lực
Nơi ở
VTC1
Liên quan đến tình ái hay kinh doanh mà gấp gáp vậy cụ. Người chụp mà cài đặt GPS hidden thì cụ cũng bó tay thôi
Chắc cụ ấy chạy quanh 1 khu to bự, chụp ảnh ở mỗi mốc và giờ lấy toạ độ để dựng lại đường bao 1 cách chưa cần chính xác lắm.
 

rgbhis

Xe điện
Biển số
OF-26681
Ngày cấp bằng
31/12/08
Số km
2,031
Động cơ
508,218 Mã lực
2 triệu vnd tiền phí
Hehe, e nhờ chatgpt làm gần xog rồi cụ. Search vs keyword chuẩn, nó cho full cả code và hướng dẫn cách build thành exe. Công nhận món chatgpt thần thánh thật, hóa ra chuyện nó làm thay coder là có thật rồi. Chắc 5-7 năm nữa là nó có thể code đc cả những hệ thống có csdl và cho nhiều người dùng.
 

xedieu

Xe cút kít
Biển số
OF-24289
Ngày cấp bằng
17/11/08
Số km
18,136
Động cơ
490,487 Mã lực
Nơi ở
VTC1
Hehe, e nhờ chatgpt làm gần xog rồi cụ. Search vs keyword chuẩn, nó cho full cả code và hướng dẫn cách build thành exe. Công nhận món chatgpt thần thánh thật, hóa ra chuyện nó làm thay coder là có thật rồi. Chắc 5-7 năm nữa là nó có thể code đc cả những hệ thống có csdl và cho nhiều người dùng.
Dã man nhỉ. Mà cụ hỏi được nó đến như vậy là cũng siêu đấy.
 

ThanhLong69

Xe điện
Biển số
OF-339786
Ngày cấp bằng
23/10/14
Số km
2,129
Động cơ
770,306 Mã lực
GPT:
Tôi sẽ giúp bạn viết một đoạn mã Python để quét tất cả các ảnh trong một thư mục, lấy thông tin tọa độ GPS (nếu có), và xuất dữ liệu ra file Excel. Bạn cần cài đặt các thư viện sau: Pillow, exif, và pandas.

Dưới đây là đoạn mã mẫu:
  1. Cài đặt các thư viện cần thiết:
    pip install Pillow exif pandas openpyxl
  2. Mã Python để quét thư mục, lấy thông tin GPS và xuất ra file Excel:

    from PIL import Image
    from exif import Image as ExifImage
    import pandas as pd
    import os

    def get_decimal_from_dms(dms, ref):
    degrees = dms[0] + dms[1] / 60.0 + dms[2] / 3600.0
    if ref == 'S' or ref == 'W':
    degrees = -degrees
    return degrees

    def get_gps_info(file_path):
    try:
    with open(file_path, 'rb') as image_file:
    img = ExifImage(image_file)
    if img.has_exif:
    gps_info = img.gps_latitude, img.gps_latitude_ref, img.gps_longitude, img.gps_longitude_ref
    lat = get_decimal_from_dms(gps_info[0], gps_info[1])
    lon = get_decimal_from_dms(gps_info[2], gps_info[3])
    return lat, lon
    except Exception as e:
    print(f"Error reading {file_path}: {e}")
    return None, None

    def scan_folder(folder_path):
    data = []
    for root, _, files in os.walk(folder_path):
    for file in files:
    if file.lower().endswith(('jpg', 'jpeg')):
    file_path = os.path.join(root, file)
    lat, lon = get_gps_info(file_path)
    data.append([file, lon, lat])
    return data

    def save_to_excel(data, output_file):
    df = pd.DataFrame(data, columns=['File Name', 'Longitude', 'Latitude'])
    df.to_excel(output_file, index=False)

    if __name__ == "__main__":
    folder_path = 'path_to_your_folder' # Thay đổi đường dẫn tới thư mục chứa ảnh của bạn
    output_file = 'gps_coordinates.xlsx'
    data = scan_folder(folder_path)
    save_to_excel(data, output_file)
    print(f"Data saved to {output_file}")
  3. Hướng dẫn sử dụng:
    • Thay đổi folder_path thành đường dẫn tới thư mục chứa ảnh của bạn.
    • Chạy đoạn mã Python này, nó sẽ quét tất cả các ảnh trong thư mục, lấy thông tin GPS nếu có, và xuất dữ liệu ra file gps_coordinates.xlsx.
Giải thích:
  • get_decimal_from_dms: Chuyển đổi định dạng tọa độ từ DMS (Degrees, Minutes, Seconds) sang số thập phân.
  • get_gps_info: Lấy thông tin GPS từ file ảnh.
  • scan_folder: Quét tất cả các file ảnh trong thư mục và lấy thông tin GPS.
  • save_to_excel: Lưu dữ liệu ra file Excel.
 

ThanhLong69

Xe điện
Biển số
OF-339786
Ngày cấp bằng
23/10/14
Số km
2,129
Động cơ
770,306 Mã lực
GPT tiếp:

Để biên dịch đoạn mã Python thành một file .exe, bạn có thể sử dụng công cụ PyInstaller. Dưới đây là các bước cụ thể để làm điều đó:

  1. Cài đặt PyInstaller:

    pip install pyinstaller
  2. Lưu đoạn mã Python vào một file, ví dụ gps_extractor.py.
  3. Chạy PyInstaller để biên dịch file Python thành file .exe:

    pyinstaller --onefile gps_extractor.py
    Lệnh --onefile sẽ tạo ra một file .exe duy nhất chứa toàn bộ mã và các thư viện cần thiết.
  4. Tìm file .exe đã được biên dịch:
    • Sau khi PyInstaller hoàn thành, bạn sẽ thấy file .exe nằm trong thư mục dist.
Ví dụ Cụ thể
Giả sử bạn đã lưu đoạn mã Python vào file gps_extractor.py, dưới đây là hướng dẫn cụ thể:

  1. Cài đặt PyInstaller:
    pip install pyinstaller
  2. Lưu đoạn mã Python vào file gps_extractor.py:

    from PIL import Image
    from exif import Image as ExifImage
    import pandas as pd
    import os

    def get_decimal_from_dms(dms, ref):
    degrees = dms[0] + dms[1] / 60.0 + dms[2] / 3600.0
    if ref == 'S' or ref == 'W':
    degrees = -degrees
    return degrees

    def get_gps_info(file_path):
    try:
    with open(file_path, 'rb') as image_file:
    img = ExifImage(image_file)
    if img.has_exif:
    gps_info = img.gps_latitude, img.gps_latitude_ref, img.gps_longitude, img.gps_longitude_ref
    lat = get_decimal_from_dms(gps_info[0], gps_info[1])
    lon = get_decimal_from_dms(gps_info[2], gps_info[3])
    return lat, lon
    except Exception as e:
    print(f"Error reading {file_path}: {e}")
    return None, None

    def scan_folder(folder_path):
    data = []
    for root, _, files in os.walk(folder_path):
    for file in files:
    if file.lower().endswith(('jpg', 'jpeg')):
    file_path = os.path.join(root, file)
    lat, lon = get_gps_info(file_path)
    data.append([file, lon, lat])
    return data

    def save_to_excel(data, output_file):
    df = pd.DataFrame(data, columns=['File Name', 'Longitude', 'Latitude'])
    df.to_excel(output_file, index=False)

    if __name__ == "__main__":
    folder_path = 'path_to_your_folder' # Thay đổi đường dẫn tới thư mục chứa ảnh của bạn
    output_file = 'gps_coordinates.xlsx'
    data = scan_folder(folder_path)
    save_to_excel(data, output_file)
    print(f"Data saved to {output_file}")
  3. Chạy PyInstaller để biên dịch:

    pyinstaller --onefile gps_extractor.py
  4. Tìm file .exe đã biên dịch:
    • Mở thư mục dist trong thư mục chứa gps_extractor.py. Bạn sẽ thấy file gps_extractor.exe nằm trong đó.
Bây giờ bạn đã có thể sử dụng file .exe này trên bất kỳ máy tính Windows nào mà không cần cài đặt Python hoặc các thư viện liên quan.
 

tratida

Xe lăn
Biển số
OF-75669
Ngày cấp bằng
17/10/10
Số km
13,172
Động cơ
517,936 Mã lực
c
Cảm ơn cụ! Cơ mà e đọc ko hiểu được. Nên đang hy vọng là có cái AI nào đó nó làm thành tool.exe cho e ăn sẵn luôn :)
cụ past vào Ai (ví dụ Bing) nó hướng dẫn nốt

Sent from Other Universe via OTOFUN
 

hoangminh1992

[Tịch thu bằng lái]
Biển số
OF-860820
Ngày cấp bằng
6/6/24
Số km
385
Động cơ
5,747 Mã lực
Tuổi
34
Mấy chú coder thất nghiêp luôn à
 

rgbhis

Xe điện
Biển số
OF-26681
Ngày cấp bằng
31/12/08
Số km
2,031
Động cơ
508,218 Mã lực
Mấy chú coder thất nghiêp luôn à
E nghĩ là sẽ giảm nhu cầu tuyển dụng coder. Ví dụ một dự án nho nhỏ cần 5 ô. Trong đó 4 ô coder làm các module nhỏ lẻ, 1 ô team leader phụ trách kiểu ghép nối các module lại thành hệ thống hoàn chỉnh. Bây giờ có AI hỗ trợ tạo các module nhỏ lẻ rồi, thì chỉ cần 2 ô coder thôi. Như thế là có 2 ô thất nghiệp rồi.
 

hoangminh1992

[Tịch thu bằng lái]
Biển số
OF-860820
Ngày cấp bằng
6/6/24
Số km
385
Động cơ
5,747 Mã lực
Tuổi
34
E nghĩ là sẽ giảm nhu cầu tuyển dụng coder. Ví dụ một dự án nho nhỏ cần 5 ô. Trong đó 4 ô coder làm các module nhỏ lẻ, 1 ô team leader phụ trách kiểu ghép nối các module lại thành hệ thống hoàn chỉnh. Bây giờ có AI hỗ trợ tạo các module nhỏ lẻ rồi, thì chỉ cần 2 ô coder thôi. Như thế là có 2 ô thất nghiệp rồi.
Công nghệ tiến bộ nhanh thật, cháu thấy lo quá, vài năm nữa taxi không người lái chạy đầy đường, thì ai cần những graber như cháu
 

rgbhis

Xe điện
Biển số
OF-26681
Ngày cấp bằng
31/12/08
Số km
2,031
Động cơ
508,218 Mã lực
Công nghệ tiến bộ nhanh thật, cháu thấy lo quá, vài năm nữa taxi không người lái chạy đầy đường, thì ai cần những graber như cháu
Taxi ko người lái thì e nghĩ còn lâu lắm, có khi đến lúc cụ về hưu thì mới phổ biến. Vì không chỉ là vấn đề công nghệ, mà cái khó hơn là vấn đề pháp lý. Vd khi có tai nạn xảy ra thì ai sẽ chịu trách nhiệm?
 

Hà Duy Phương

Xe tải
Biển số
OF-202359
Ngày cấp bằng
16/7/13
Số km
420
Động cơ
325,229 Mã lực
Tool đơn giản thì AI ăn được. Chứ cả 1 module lớn thì còn lâu mới ăn được người. Viết thì viết chứ lúc debug thì có khi không ra đâu. [-X[-X
 
Thông tin thớt
Đang tải

Bài viết mới

Top