diff --git a/week2/community-contributions/enhanced_profile_picture/README.md b/week2/community-contributions/enhanced_profile_picture/README.md new file mode 100644 index 0000000..ec659a7 --- /dev/null +++ b/week2/community-contributions/enhanced_profile_picture/README.md @@ -0,0 +1,21 @@ + +# Enhanced Profile Picture +Create a stylish profile picture by extracting all the companies you worked for and all the clients you serviced from your profile, and add these company/client logos to your profile picture after applying some Ghibili style. + +## Contents + +- `profile_with_company_logos.ipynb`: The notebook file with all code and explanations. +- `my_profile.pdf`: Your profile in pdf format. (Please relace this file with your own profile) +- `my_picture.jpg`: Your profile picture. (Please replace this with your own picture) +- `ai_profile_picture.png`: The AI generated picture. + +## How to Run + +1. Add the GOOGLE_API_KEY. +2. Run the jupyter notebook. + + +### Author + +Hui Wang + diff --git a/week2/community-contributions/enhanced_profile_picture/my_picture.jpg b/week2/community-contributions/enhanced_profile_picture/my_picture.jpg new file mode 100644 index 0000000..6d0d6df Binary files /dev/null and b/week2/community-contributions/enhanced_profile_picture/my_picture.jpg differ diff --git a/week2/community-contributions/enhanced_profile_picture/my_profile.pdf b/week2/community-contributions/enhanced_profile_picture/my_profile.pdf new file mode 100644 index 0000000..750ccfc Binary files /dev/null and b/week2/community-contributions/enhanced_profile_picture/my_profile.pdf differ diff --git a/week2/community-contributions/enhanced_profile_picture/profile_with_company_logos.ipynb b/week2/community-contributions/enhanced_profile_picture/profile_with_company_logos.ipynb new file mode 100644 index 0000000..e6e434f --- /dev/null +++ b/week2/community-contributions/enhanced_profile_picture/profile_with_company_logos.ipynb @@ -0,0 +1,189 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "from dotenv import load_dotenv\n", + "from IPython.display import Markdown, display, update_display\n", + "from google import genai\n", + "from google.genai import types\n", + "from PIL import Image\n", + "from io import BytesIO\n", + "import base64\n", + "from PyPDF2 import PdfReader" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "id": "Jd_mMczWPcf-" + }, + "outputs": [], + "source": [ + "# prompt: get gemini api key and create a client connection to gemini\n", + "\n", + "# imports\n", + "\n", + "load_dotenv(override=True)\n", + "google_api_key = os.getenv('GOOGLE_API_KEY')\n", + "\n", + "google = genai.Client(api_key=google_api_key)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "id": "STKn3tGIVxOA" + }, + "outputs": [], + "source": [ + "def modifyImage(image, prompt):\n", + " response = google.models.generate_content(\n", + " model=\"gemini-2.0-flash-preview-image-generation\",\n", + " contents=[prompt, image],\n", + " config=types.GenerateContentConfig(\n", + " response_modalities=['TEXT', 'IMAGE'],\n", + " temperature=0.1\n", + " )\n", + " )\n", + "\n", + " for part in response.candidates[0].content.parts:\n", + " if part.text is not None:\n", + " print(part.text)\n", + " elif part.inline_data is not None:\n", + " image = Image.open(BytesIO(part.inline_data.data))\n", + " #image.show()\n", + " return image" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "06h-zRWtWL2J", + "outputId": "e12b3b9a-4586-4cac-b3b9-1b5d6f27f708" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "I will transform the photograph into a vibrant Ghibli-style illustration. The scene will depict a man in a blue striped shirt and light blue shorts standing on a balcony with a glass railing. Behind him, the iconic Hollywood sign will be visible on a sun-drenched, grassy hillside under a clear blue sky, rendered with the characteristic soft lines and lush colors of Studio Ghibli animation.\n", + "\n", + "\n" + ] + } + ], + "source": [ + "styled_image = modifyImage(Image.open('my_picture.jpg'), 'convert the attached images to a Ghibli art work.')" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "id": "mR8MoSimZ14L" + }, + "outputs": [], + "source": [ + "def read_pdf(file_name):\n", + " file = open(file_name, \"rb\")\n", + " bin = file.read()\n", + " reader = PdfReader(BytesIO(bin))\n", + "\n", + " text = \"\"\n", + " for page in reader.pages:\n", + " text += page.extract_text()\n", + " return text\n", + " \n", + "def find_companies(text):\n", + " response = google.models.generate_content(\n", + " model=\"gemini-2.0-flash\",\n", + " config=types.GenerateContentConfig(\n", + " system_instruction=\"You are a career assistant.\"),\n", + " contents=('From the following text, please identity the company names I worked at or served as client. Please only return the company names, with each company name on a new line, no other text: \\n' + text)\n", + " )\n", + " return response.candidates[0].content.parts[0].text" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "id": "uZopM8pObBIB" + }, + "outputs": [], + "source": [ + "pdf_text = read_pdf('my_profile.pdf')\n", + "company_response = find_companies(pdf_text)" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "kKoneJrjegUu", + "outputId": "96f601f5-dec5-424f-b8ad-34c019091395" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "I will add the specified company logos as subtle elements in the background of the image, ensuring each logo appears only once and does not distract from the main subject.\n", + "\n", + "\n" + ] + } + ], + "source": [ + "final_image = modifyImage(styled_image, 'Please add the following company logos to the background, make sure only add each logo once:\\n' + company_response)" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [], + "source": [ + "final_image.save('ai_profile_picture.png')" + ] + } + ], + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "display_name": "llms", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.12" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +}